Буквально вчера обнаружил еще одну классную фишку в Smarty… А было дело так. На сайте был довольно тяжелый подвал, в котором было сразу несколько нагруженных моментов (пара Wayfinder-ов, getResources с набивкой в шаблоны с использованием phpthumbOf-а и т.п.). При этом подвал был одинаковый для всех страниц сайта. Конечно подвал был кешируемый, но все мы знаем, что кеш в MODX-е создается отдельно для каждой страницы. То есть при первом заходе на каждую страницу в отдельности, все равно подвал выполнялся полностью. Ну я как обычно решил это дело оптимизировать, заменив подвал на кешируемый сниппет, в котором уже подгружал шаблон подвала, и кешировал его с помощью $modx->cacheManager. В таком случае шаблон выполнялся только один раз после полного сброса кеша, а во всех остальных случаях даже при первом заходе на страницу, подвал уже не выполнялся с нуля, а возвращался его код из кеша. Конечно это позволяет значительно снизить нагрузку, но все равно имеется сразу несколько минусов:
Натолкнул я тебя на мысль посмотреть на смарти и ты нашел там совсем другую плюшку -) Спасибо, не знал.
Нет, это не твоя мысль совсем, не присваивай :-) Если ты про {php}, то я ее даже и не смотрел. А историю того, как я к этому пришел, я написал в топике.
Да я тролю в силу того, что две мысли о смарти в один день появились. И, кстати, {php} не пашет, погляди на досуге, плиз. Возможно не пашет в силу того, что сам шаблон в modx тоже с PHP. И получается, по первому мнению, эдакая рекурсия, что апач нагружается на 100% и вылетает по «бесконечному циклу».
Ребята, включайте вывод ошибок на дев-серверах. Как вы так работаете без отладки? Вслепую? Пишет же четко: Fatal error: Uncaught exception 'SmartyException' with message '{php} is deprecated, set allow_php_tag = true to enable В контроллере или в плагине пропишите $modx->smarty->allow_php_tag = true; и будет вам счастье.
В слепую, на высоком уровне доверия к разработчикам. А затем начинается гадание: кто виноват, мля??? =) Спасибо. Пойду включать неэстетичный вывод ошибок.
Неэстетичный — это к дизайнерам. А для программиста отладка — его всё.
А где ты видел отдельно дизайнера отладочных интерфейсов? Вызов принят, надо эстетики навесить на вывод ошибок.
Ну, я вот вообще далекий от эстетики человек. А к примеру artdevue — он и программер хороший, и с дизайном дружит.
У меня такой вопрос, беря во внимание эту статью, первый пункт, мы можем добавлять идентификатор cache только в {include file}? Тогда все таки придется шаблон распилить на файлы? или можно воспользоваться блоком? что то типо этого: {block name=header cache="header"} То есть вот так: {* Header *} {block name=header cache="header"} <a id="logo" title="{$site_name}" href="/"></a>
<nav id="menu"> {assign var=params value=[ "startId" => 0 ,"level" => 1 ,"cacheable" => true ,"id" => "mainMenu" ]}{processor action="web/menu/getcatalogmenu" ns="hamster" params=$params assign=result}
{assign var=items value=$result.object}
{include file="inc/menu/catalog/outer.
</nav>
<div id="phone_order">
Заказ по телефону:<br />+7 (495) 221-90-21<br />+7 (495) 221-90-23<br />+7 (925) 092-28-33
</div>
<div id="user_panel">
<a id="cartLink" href="{link id=4}" title="Корзина">Корзина</a>
<span class="uLogin">[[!uLogin? &providers="vkontakte,facebook,odnoklassniki,twitter,mailru,google" &hidden="" &userGroups="Authorized" ]]</span>
</div>
{/block}
{* Eof Header *}или можно воспользоваться блоком? что то типо этого: Нет. Судя по документации в блоке можно указать nocache. Это надо только при включенном глобальном кешировании Smarty. Но нельзя как подшаблону указать cache_id. А что тебе не нравится закинуть это в отдельный файл? Если это кешируемый подшаблон, то все равно он не будет каждый раз подгружаться (файл подшаблона). Будет вызываться метод Smarty, который будет проверять наличие кеша, и возвращать его, если он есть.