Шаблон на Smarty

DenVeroid

Новичок
Зделал всё так как написано в документации
вот сам код:


PHP:
<?php

require 'Smarty.class.php';
$smarty = new Smarty;

$hostname = "localhost";
$dbUser = "root";
$dbPass = "root";
$dbName = "sw";



$conn = mysql_connect($hostname, $dbUser, $dbPass) or die("Cannot connect to the database");
mysql_select_db($dbName);



function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{

    $sql = new SQL;
    $sql->query("select * from template where tpl_name='mytem'  AND template_show='5'");
    if ($sql->num_rows) {
      echo  $tpl_source = $sql->record['tpl_content'];
        return true;
    } else {
        return false;
    }
}


function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{

    $sql = new SQL;
    $sql->query("select * from template where tpl_name='mytem'  AND template_show='5'");
    if ($sql->num_rows) {
        $tpl_timestamp = $sql->record['tpl_content'];
        return true;
    } else {
        return false;
    }
}

function db_get_secure($tpl_name, &$smarty_obj)
{

    return true;
}

function db_get_trusted($tpl_name, &$smarty_obj)
{

}


$smarty->register_resource("db", array("db_get_template",
                                       "db_get_timestamp",
                                       "db_get_secure",
                                       "db_get_trusted"));




$res = mysql_query("SELECT * FROM news limit 45");
$results = array();
$i=0;


while ($r=mysql_fetch_array($res)) {
$bgColorS = ($bgColorS == "green" ? "red" : "green");
$bgColorT = ($bgColorT == "#F4F4F4" ? "#eceff2" : "#F4F4F4");

            $tmp = array(
                'id' => $r['id'],
                'title' => $r['title'],
                'body' => $r['body'],
                'bgColorS' => "".$bgColorS."",
                'bgColorT' => "".$bgColorT."",
                'more'=> $r['more']
            );
            $results[$i++] = $tmp;

}

$smarty->assign('results', $results);

echo $smarty->display("db:index.tpl");

?>
файл index.tpl пустой

но после запуска, ничего не выводиться, что тут не нак?
 

DenVeroid

Новичок
Ауууууууууууу........
ну где там.. ктонибудь помогите...... ааа....
 

vasnas

Guest
PHP:
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
$db=DB::connect( "mysql://root:@local/energomera" , true);
if (DB::isError($db)) {die ($db->getMessage());}
$res=$db->query("SELECT content FROM templates WHERE name='".$tpl_name."'");
print $res->numRows()." ".$tpl_name."<br>" ;
if ($res->numRows() > 0)
	{
	list($tpl_source) = $res->fetchRow();
	return true;
	}
	else {return false;}
}
function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
$db=DB::connect( "mysql://root:@local/energomera" , true);
if (DB::isError($db)) {die ($db->getMessage());}
$res=$db->query("SELECT timestamp FROM templates WHERE name='".$tpl_name."'");
if ($res->numRows() > 0)
	{
	list($tpl_timestamp) = $res->fetchRow();
	return true;
	}
else {return false;}
}

function db_get_secure($tpl_name, &$smarty_obj)
{// assume all templates are secure
return true;}
function db_get_trusted($tpl_name, &$smarty_obj)
{// not used for templates}

$smarty->register_resource("db", array("db_get_template","db_get_timestamp","db_get_secure","db_get_trusted"));

$smarty->display('db:index', $_GET["chains"]);
а у меня все работает... ты попробуй отдалить функцию db_get_template. Скорее это она не выдает результат..и там какая то ошибка. Пораспечатай внутри неё значения условий и т.д.
 

DenVeroid

Новичок
vasnas, спасибо, сейчас буду разбираться, тока подскажи в поле content я так понимаю находиться сам шаблон, а что должно быть в поле timestamp, время чтоли какоето?
и какое значение должна содержать $_GET["chains"]

и ещё вопрос, сам запрос который должен выводить данные не шаблона, а допустим новости, статьи, где он должен распологаться?
 

vasnas

Guest
$_GET["chains"] - здесь это всего лишь метка для кэшей одного и того же шаблона... один и тот же шаблон но для разного содержимого кэшируется в разных кэшах.

запрос располагается в скрипте..а шаблон только для удобства дизайнера.
 

DenVeroid

Новичок
блин, всё немогу въехать, я прям вшоке, с файлами всё с первого раза пошло а вот с БД никак немогу понять, допустим с полем timestamp что в нём должно быть непойму, если тебе нетрудно пожалуйста скинь мне скрипт работающий ну если сможешь даже и со структурой БД, кстати я незаметил в твоём примере функции assign.
у меня такая структура:
PHP:
CREATE TABLE template (
  tpl_id int(11) NOT NULL auto_increment,
  tpl_name varchar(20) NOT NULL default '0',
  tpl_status varchar(20) NOT NULL default '0',
  template_show varchar(20) NOT NULL default '0',
  tarea_row varchar(20) NOT NULL default '0',
  name_template varchar(20) NOT NULL default '0',
  tpl_rows int(11) unsigned NOT NULL default '0',
  tpl_content text NOT NULL,
  tpl_orig_content text NOT NULL,
  PRIMARY KEY  (tpl_id)
) TYPE=MyISAM;
мой емайл: [email protected]
 

vasnas

Guest
PHP:
$smarty = new Smarty_chain_smarty;
$smarty->compile_check = true;
$smarty->debugging = true;
$smarty->caching=false;
// register the resource name "db"
$smarty->register_resource("db", array("db_get_template","db_get_timestamp","db_get_secure","db_get_trusted"));

$menu= new menu_class;

$time_start=microtime();

if(!$smarty->is_cached('index.tpl', $_GET["chains"]))
	{
	$smarty->assign("menu", $menu->menu_to_str());
	}

$smarty->display('db:index', $_GET["chains"]);
//-------------------------------------------------------------------------------

CREATE TABLE `templates` (
`id` tinyint(4) NOT NULL auto_increment,
`timestamp` timestamp(14) NOT NULL,
`name` varchar(30) default NULL,
`content` text,
UNIQUE KEY `id` (`id`)
) TYPE=MyISAM
 
Сверху