fetch & dynamic (:

DIMAD

Новичок
fetch & dynamic :)

есть шаблон:
Страница кэширована: {"0"|date_format:"%D %H:%M:%S"}<br>
{dynamic}
Текущее время: {"0"|date_format:"%D %H:%M:%S"}<br>
{/dynamic}

если страничка вызывается через - $block_content = $GLOBALS['smarty']->display("blocks/menu/menu.html");
все работает нормально и время кеширования от текущего отличается.

если вызвать через $block_content = $GLOBALS['smarty']->fetch("blocks/menu/menu.html");
все кешируется и текущее время не соответствует действительности :(.

Помогите пожалуйста решить проблему.
 

b-d

Новичок
2 DIMAD:

Код:
void display (string template [, string cache_id [, string compile_id]])
Так определяется метод display() в классе Smarty. Зачем присваивать результат переменной?

..текущее время не соответствует действительности..
Как говаривал Альберт Эйнштейн - все относительно.. Опиши проблему поподробней. Не очень понятно. Вызываются ли эти функции в одном месте? Каков твой предполагаемый результат? Почему вместо времени стоит "0"? Какая версия Smarty? ....
 

DIMAD

Новичок
Версия смарти последняя.
Присваиваю результат переменной для дальнейшей работы с ней :). display вызывается в самом конце. Проблема заключается в том что по-идее все что за тегами {dynamic} {/dynamic} не должно кешироваться. Если вызываю шаблон через функцию display частичка кода в тегах {dynamic} {/dynamic} не кешируется, как и должно быть. Как только вызываю шаблон через fetch - все кешируется, такое впечатление что оно вообще не воспринимает теги {dynamic} {/dynamic} :(
 

b-d

Новичок
DIMAD, Ну ты шпион..

Все ещё шифруешся. хе. Даже не знаю что тебе сказать. RTFM вроде не подходит. Почему ты думаешь, что
..по-идее все что за тегами {dynamic} {/dynamic} не должно кешироваться..
Нашел то, откуда ты это взял.. это пример из документации Smarty (немного переделал):

-----------------> index.php
PHP:
<?php
require('smarty/libs/Smarty.class.php');

$smarty = new Smarty;
$smarty->caching = true;

$smarty->cache_dir    = dirname(__FILE__)."/test/cache";
$smarty->template_dir = dirname(__FILE__)."/test/templates";
$smarty->compile_dir  = dirname(__FILE__)."/test/templates_c";
$smarty->config_dir   = dirname(__FILE__)."/test/configs";

function smarty_block_dynamic($param, $content, &$smarty) {
    return $content;
}

$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
//$smarty->display('index.tpl');
echo $smarty->fetch('index.tpl');

?>
-----------------> index.tpl
Код:
Page created: {"0"|date_format:"%D %H:%M:%S"}

{dynamic}

Now is: {"0"|date_format:"%D %H:%M:%S"}

... do other stuff ...

{/dynamic}

Собственно... как написано так и происходит. Советую быть повнимательней.
 

DIMAD

Новичок
кто шифруется? я? ты меня с кем-то путаешь.
с проблемой разобрался. все оказывается отрабатывалось. Дело оказывается было в том, что этот шаблон генерился независимо и не подхватывался тем что вызывался. тоесть создавалась два файла в одном из которых было все кешировано а другой - содержал то что мне надо.
в итоге 1 файл содержал

143
a:4:{s:8:"template";a:1:{s:21:"blocks/menu/menu.html";b:1;}s:9:"timestamp";i:1159264813;s:7:"expires";i:1159268413;s:13:"cache_serials";a:0:{}}<a href="path.php?path=main_page&amp;main_pageid=1" target="_parent"> Пункт1</a><br>
<a href="path.php?path=main_page&amp;main_pageid=2" target="_blank"> Пункт 2</a><br>

кешированный
<tr valign="top">
<td colspan="2" style="width:100%; height:100%; background-image:url(themes/top/images/bgtable.jpg); border-left-color:#EEEEEE; border-left-style:solid; border-left-width:3px; border-right-color:#EEEEEE; border-right-style:solid; border-right-width:3px;">
<a href="path.php?path=main_page&amp;main_pageid=1" target="_parent"> Пункт1</a>

</td>
</tr>

таким образом если вызываешь первый через display то все естественно отрабатывалось, если через фетч то выводился кешированный второй.
 
Сверху