2009-06-06 1 views
2

Я использую Smarty в своих проектах, когда я включаю кеширование, похоже, не работает. Я использую следующую структуру:Кэш Smarty не работает?

index.php - дисплей (index.tpl)

index.tpl - {включают файла = $ page_center}

модуль = продукт - $ smarty-> assign ("page_center", "product.tpl");

В product.php шаблон product.tpl должен быть загружен в центр index.tpl. Когда я включаю кеширование, он по-прежнему показывает содержимое по умолчанию, а не product.tpl. Когда кеширование отключено, он работает нормально. В чем проблема при включении кеширования?

ответ

7

Вам нужно будет использовать уникальный кэш-идентификатор для каждой страницы, чтобы сделать эту работу правильно:

$cacheID = 'some_unique_value_for_this_page'; 
$smarty->assign('page_center', 'product.tpl'); 
$smarty->display('index.tpl', $cacheID); 

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

Там больше информации о в руководстве Smarty: http://www.smarty.net/manual/en/api.display.php

+0

ok. Я тестирую его, но он не помогает мне, к сожалению, каждый раз, когда модуль вызывает новый файл cach, создается в каталоге cach, это то же самое, что я использую $ smarty-> force_compile. это путь не правильный способ поймать, я думаю. – mehdi

+0

Старая тема теперь, но использование значения, уникального для этой страницы, выполнит эту работу для вас, например, если у вашего продукта есть идентификационный номер продукта, а затем используйте его как свое уникальное значение кеширования; Smarty будет компилировать и кэшировать шаблон для этой конкретной страницы продукта один раз, а затем обращаться к кешированной версии в любое время, о котором она упоминается в будущем. – Rohaq

+0

Мое решение кеширования на основе языка ($ cache_id = $ lng_id). Благодаря! –

0

вам нужно создать динамический модуль!

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

затем

$smarty = new Smarty 
$smarty->register_block('dynamic', 
         'smarty_block_dynamic', 
         false /* this block wont be cached */); 

и ваш TPL

Hello {$name} 

this is your las update 

{/dyamic} 
{include file="some/dynamic/thing.tpl"} 
{/dynamic} 
0

Прежде чем пытаться решить Smarty проблему кэширования, то есть, если кэширование не происходит, пожалуйста, проверьте, если ваша папка templates_c была читать и писать Разрешения для всех