Jump to content

Smarty compile & cache или Почему я не вижу изменений при редактировании шаблона?


Recommended Posts

пишу эту тему в частности для того чтобы не повторять одно и тоже тысячу раз, а давать ссылку :)

 

Все мы знаем, что при редактировании шаблона, для того чтобы увидеть текущие изменения в магазине на фронтенде, необходимо на вкладке Preferences - Perfomance в разделе Smarty установить опции

Force Compile - Yes
Cache - No

Ну знаем и знаем, я и сам как попугай эту мантру повторяю каждый раз, но меня всегда смущало, что директория

 /tools/smarty/compile/

"заполняется файлами", а

 /tools/smarty/cache/

нет (кроме отдельных случаев, о них ниже), и вот вчера из-за одного проекта я таки изучил этот вопрос и сделал выводы :)

во-первых заглянул в конфиг смарти, а там

$smarty->caching = false;

o_O

во-вторых сразу выводы чтобы не мусолить:

  • кэширование смарти для общих страниц (товары, категории ит.д.) в Престашоп не используется. Используется для отдельных модулей аля blockcategories (на престалаб была статья-перевод по поводу кэширования модулей, я увы не изучил тему на тот момент)
  • опцию Cache в настройках Смарти в админке нефиг дергать, она не работает, не понимаю почему ее не закаментили давно.
  • принудительное активирование кэша в конфигах, приводит к печальке, темплейты кэшируются не персонифицировано, выглядит это как "один и тот же товар для любой страницы товара"
  • предположительно можно реализовать кэширование самостоятельно, передавая $cache_id в $smarty->display вторым параметром, я сделал эксперимент с категориями, получилось, но видны баги в тайтлах.. корчое предполагаю что сделать можно, просто реализация, валидация ит.д. ложится на вас
  • выводов по быстродействию нет, предполагаю что на фоне использования других уровней кэширования - ситуация сглаживается

Такое, ни о чем, но может кому-то пригодится)

 

P.S. изменил название на более понятное

Edited by SergeyH (see edit history)
  • Like 1
Link to comment
Share on other sites

Тема, объявленная в заголовке, не совсем раскрыта. Почему иногда приходится вручную чистить Tools/Smarty/Compile? Ждем дальнейших откровений.

И кстати, вопрос эффективности файлового кэширования (memcache) для Престы не обсуждался толком.

Link to comment
Share on other sites

про откровения - это сарказм такой?)

 

- memcache - кэширование в ОЗУ (если под файловым вы имели ввиду сохранение на диск), оно ничем не отличается особо для престы или других скриптов.

- почему приходится чистить вручную конкретно в в вашем случае сказать не могу, да сам часто так делаю, когда надо быстро разово очистить и директория открыта под рукой + помню иногда и правда были затыки в старых версиях, но проблему не локализовал, то весервер чинил то еще что, да и не стояло такой задачи.

- плюс если покурить доки, то можно найти

$compile_check

Upon each invocation of the PHP application, Smarty tests to see if the current template has changed (different timestamp) since the last time it was compiled. If it has changed, it recompiles that template.

 

вполне здоровая альтернатива force compile, сегодня опробую работает ли оно, т.к. многие создатели шаблонов с не очень прямыми руками произрастающими из околопаховых областей, умудряются клепать из таким образом что при включении компиляции престашоп просто перестает отзываться.

  • Like 1
Link to comment
Share on other sites

Опция Cache работает для тех модулей, в которых предусмотрено кэширование. Например блок категорий или верхнее горизонтальное меню.

 $smartyCacheId = 'идентификатор кэша, например ид языка';
 $smarty->cache_lifetime = 31536000; // кэширование на год
 //Тут включается кэширование
 Tools::enableCache();
 //Проверяется есть ли в кэше страница
 if (!$this->isCached('шаблон.tpl', $smartyCacheId))
 {
  //Тут присвоение переменных
 }
 //Обработка шаблона
 $display = $this->display(__FILE__, 'шаблон.tpl', $smartyCacheId);
 //Восстанавливаются настройки кэширования как были (отключается кэширование)
 Tools::restoreCacheSettings();

  • Like 1
Link to comment
Share on other sites

Опция Cache работает для тех модулей, в которых предусмотрено кэширование. Например блок категорий или верхнее горизонтальное меню.

 Tools::enableCache();

 Tools::restoreCacheSettings();

 

да, я видел, вопрос в том что кэшируетя оно "насильно" и сбросить кэш модулей переключателем в бэкофисе нельзя

Link to comment
Share on other sites

Сбросить нельзя, можно отключить. В этом случае функция enableCache ничего не делает.

угу, заглянул, а там

if (!Configuration::get('PS_SMARTY_CACHE'))
  return;

вопрос "почему опцию не закаментили" снимается

Edited by SergeyH (see edit history)
Link to comment
Share on other sites

×
×
  • Create New...