Шаблон на Smarty

DenVeroid

Новичок
Шаблон на Smarty

есть неболшая проблема, нуна зделать шаблон на смарти, проблема заключается в том что сам шаблон храниться не в файлах а в базе данных я привёл тут неболшой код в переменной $str храниться сам шаблон поидее он будет из базы данных


PHP:
<?php

$str = <<<EOD
{section name=list  start=0 loop=$results step=0}

<table align=center width=80% cellSpacing=0 cellPadding=0>
<tr bgcolor=c0c0c0>
 <td bgcolor=FFFFFF>
<br>
<table border=0 width=100%>
  <tr>
    <td bgcolor={"".$results[list]."".bgColorT} width=100%>

<a href=show.php?id={"".$results[list]."".id}>{"".$results[list]."".title}</a> <br>
{"".$results[list]."".body}<br>

</td>
  </tr>
</table>
<p><br>
</p>
</td>
</tr>
</table>
{/section}
EOD;
?>


далее я по доке зделал что-то подобное но выводил на страницу всё подряд вместе с масивом так:

[1] => Array ( [id] => 24 [title] => Особое внимание [body] =>

причём на переменную $str вообще нереагирует, как быть



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);

$sql = "SELECT * FROM news  ORDER BY id ASC";
$res = mysql_query($sql);
$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);

$str = $smarty->get_template_vars($str);
$tpl_vars = $smarty->get_template_vars();
print_r($tpl_vars);
?>


если шаблон хранить в файле то всё нормально
 

telepuzik

тинки-винки
По моему там гдето в документации по смарти (? - ленишься читать что ли) был пример как хранить шаблоны в базе. Работающий.
 

DenVeroid

Новичок
да весь просмотрел нашол только вот такой


Q: Is there an instruction to get all vars assigned to a template? (Mattia)
A: Yes, using get_template_vars (Oscar Fernandez Sierra):

// get all assigned template vars
$tpl_vars = $smarty->get_template_vars();
// take a look at them
var_dump($tpl_vars);
 

DenVeroid

Новичок
если я правельно понял то в моём коде должен выглядеть так

PHP:
$smarty->assign('results', $results);
echo $smarty->fetch($template_content);
?>
но ничего нивыходит, показывает пустую страницу
 

DenVeroid

Новичок
ну кто нибудь подскажите что нетак, почему пустая страница выводиться, переменная $template_content я проверял точно содержит шаблон.

если делать так, тоесть указывать на файл то всё нормально
PHP:
$smarty->assign('results', $results); 
echo $smarty->fetch('index.tpl');
?>
 

DenVeroid

Новичок
KR, а что толку? там показано только на файл
$smarty->display("index.tpl");

а мне надо с базы или с переменной

уже день бъюсь всю доку пересмотрел и всё ни как
 

lunux

Новичок
А тут хтось знает где менюел на РУССКОМ раздабыть?
 

DenVeroid

Новичок
доку на русском нигде ещё невидел.

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

DenVeroid

Новичок
вот может понятнее будет

это шаблон, он храниться в базе данных
PHP:
{section name=list  start=0 loop=$results step=0}
<table align=center width=80% cellSpacing=0 cellPadding=0>
<tr bgcolor=c0c0c0>
 <td bgcolor=FFFFFF>
<br>
<table border=0 width=100%>
  <tr>
    <td bgcolor="{$results[list].bgColorT}" width=100%>
{$smarty.section.list.rownum}
<a href=show.php?id={$results[list].id}>{$results[list].title}</a> <br>
{$results[list].body}<br>

</td>
  </tr>
</table>
<p><br>
</p>
</td>
</tr>
</table>
{/section}
весь этот шаблон содержиться в переменной $tpl_content_row


а это сам код

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); 

$result=@mysql_query("SELECT * FROM template  where tpl_name='mytem'  AND template_show='5' ") or die("Ошибка");
while($row=mysql_fetch_array($result)) {


        $tpl_content_row = $row["tpl_content"];
}


$sql = "SELECT * FROM news  ORDER BY id ASC"; 
$res = mysql_query($sql); 
$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->fetch('index.tpl'); 


// а если так (тоесть через переменную $tpl_content_row) то ничего невыводиться, ни ошибок ничего

$smarty->assign('results', $results); 
echo  $smarty->fetch($tpl_content_row);
?>

чё ему надо то???? почему через переменную нехотит парсить?????
 

DenVeroid

Новичок
да это всё фуфло, совсем нето, зачем спрашивается там прсутствует $smarty->display("db:index.tpl");

нафига этот фай присутствует index.tpl

что прям никто незнает???????????????????????
 

tony2001

TeaM PHPClub
не ори, не в лесу.

>да это всё фуфло, совсем нето, зачем спрашивается там прсутствует
> $smarty->display("db:index.tpl");
перечитай еще раз.
там написано как и что делается.

>нафига этот фай присутствует index.tpl
index.tpl - то ID ШАБЛОНА В БАЗЕ.
доступно?
 

DenVeroid

Новичок
не ори, не в лесу.
да я бы рад, но сами понимаете уже как второй день сижу на одном месте, я доку всю пересмотрел и тот пример что дал KR, и всё немогу понять хоть убей.

Ладно, тогда помогие кто может втроить мой код в тот пример что был последним, буду благодарен тысячю раз...
 

tony2001

TeaM PHPClub
1) скопировать код из мана
2) исправить запрос "select tpl_timestamp from my_table where tpl_name='$tpl_name'" на нужный
3) указать ID записи в базе
4) радоваться жизни
 

DenVeroid

Новичок
Так, чёто зделал? тока непонятно зачем здесь два запроса для шаблона?
я так по нимаю один должен быть для шаблона, а второй для вывода данных?

PHP:
require 'Smarty.class.php';
$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);

// put these function somewhere in your application
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
    // do database call here to fetch your template,
    // populating $tpl_source
    $sql = new SQL;
    $sql->query("select * from template where tpl_name='mytem'  AND template_show='5'");
    if ($sql->num_rows) {
       $tpl_source = $sql->record['tpl_content'];
        return true;
    } else {
        return false;
    }
}

function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
    // do database call here to populate $tpl_timestamp.
    $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"));

// цифра шесть это порядковый номер в базе данных id=6
$smarty->display("db:6");
зделал так как понял, но пока никакого результата, где должен быть запрос
который должен выводить данные?

да, извеняюсь что постю большие отрывки кода
 

vasnas

Guest
Автор оригинала: lunux
А тут хтось знает где менюел на РУССКОМ раздабыть?
на poetry.hotbox.ru

посылал на phpclub.net 2 раза но они говорят в html переделывай а я не хочу...
 

DenVeroid

Новичок
vasnas, спасибо за русскую документацию.

у меня появились несколько вопросов

1. что должно быть в файле index.tpl (если шаблон мы берём из базы зачем указывать на это файл?)

2. Что за переменная tpl_timestamp и $tpl_source тоесть что они должны содержать ?

3. куда должна вставляться запрос для вывода данных

4. здесь я вижу только две функции с двумя запросами для вывода самого шаблона, разве это нельзя зделать одним?
 
Сверху