Недавно столкнулся с проблемой вынести определённые блоки в отдельные файлы темплейтов.
В свою очередь вызывать их используя функцию {include}. Данный подход удобный тем, что достигается большая гибкость в использовании отображения на других страницах.
Но проанализировав, во что компилируется конструкция типа:
{foreach from=$products item=product}
{if $product.featured}
{include file="featured_product_item.tpl" product=$product}
{elseif $product.isnew}
{include file="new_product_item.tpl" product=$product}
{else}
{include file="product_item.tpl" product=$product}
{/if}
{/foreach}
пришёл к печальному выводу, что в результате мы получим банальный php-ный include со всеми вытекающими отсюда скоростными последствиями. Логичнее было бы перед компиляцией вставить код темплейта непосредственно в цикл, после чего только компилировать шаблон.
Странно, почему разработчики смарти не добавили данную возможность.
Полазив по форумам, нашёл солюшен на форуме смартей - {inline} тэг от разработчиков, который является pre-фильтром,
Линк
Возможно кому-то пригодиться



августа 29, 2006 в 1:09 pm
Незнаю - сколько пользуюсь Смарти - include всегда устраивал. О такой проблеме даже не задумывался.
августа 29, 2006 в 1:56 pm
Просто в цикле инклуд будет достаточно медленным.
хотя я стараюсь избегать инклудов в циклах Смарти.
августа 31, 2007 в 8:11 pm
Никогда не сталкивался с таким, правда смарти у меня нет, но хз как можно include использовать в цикле... раз это шаблон, то его все равно обрабатывать потом...
августа 31, 2007 в 8:35 pm
проспамились в каментах чтобы ссыльку получить?
ладно
живите