Определение имен динамических блоков

Я использую наследование шаблонов Smarty 3. У меня есть следующая проблема:

Это код родительского шаблона:

{foreach from=$items_collection item=single_item name=foo}
  {block name="bar_{$smarty.foreach.foo.index}"}
    some html goes here that I need to make editable if required
  {/block}
{/foreach}

И после этого, когда я расширяю шаблон:

{extends file='path/to/template/file.tpl'}

{block name="bar_0"}random stuff{/block}
{block name="bar_1"}random stuff{block}
...

Или любое другое динамически сгенерированное имя блока, оно не меняет значения шаблона... все, что я получаю от дочернего элемента, - это родитель, но без измененного содержимого блоков.

Существует ли специальный синтаксис или какой-либо другой метод для получения динамических имен блоков.


person Plamen Nikolov    schedule 25.01.2013    source источник


Ответы (1)


Я не думаю, что может быть. Блоки не хранятся как переменные, а затем заполняются в шаблоне при его отображении, вместо этого они компилируются один раз, а затем становятся статическими для кэшированного шаблона.

Наследование шаблонов — это процесс времени компиляции, который создает один скомпилированный файл шаблона. По сравнению с соответствующими решениями, основанными на подшаблонах, включенных в тег {include}, он имеет гораздо лучшую производительность при рендеринге.

Трудно дать совет о том, как делать то, что вы хотите сделать, поскольку вы довольно расплывчаты, но вы, вероятно, можете делать то, что хотите, с заблокировать функцию

person Danack    schedule 27.01.2013
comment
Да ты прав. Я решил использовать другую стратегию, используя {capture}, а затем поместив заполнители содержимого захвата в родительский шаблон. - person Plamen Nikolov; 27.01.2013