Этот вопрос связан с этим вопросом Есть ли что-то вроде Dwoo-s {with} или {loop} в Smarty 3 или более ранней версии?
В основном я хочу иметь что-то вроде currentузел из шаблонов XSLT.
В XSLT, когда я пишу что-то вроде:
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
Artist фактически ссылается на каталог / CD [1] / Artist (и, конечно, [2], [3] ... и т. д., если есть больше компакт-дисков)
Текущий контекст, в котором имена полей понимаются, изменяется внутри каждого блока.
Мне очень нравится эта функциональность.Знаете ли вы какой-нибудь популярный шаблонный движок PHP (кроме Dwoo), обладающий такой функциональностью?
ОБНОВЛЕНИЕ:
Тим Фонтан предложил:
// smarty
{foreach from=$cds item=cd}
<tr>
<td>{$cd->title}</td>
<td>{$cd->artist}</td>
</tr>
{/foreach}
но я бы предпочел что-то вроде:
// dwoo
{foreach from=$cds}
<tr>
<td>{$title}</td>
<td>{$artist}</td>
</tr>
{/foreach}
, которое не будет работать.
Подумайте о вложенном цикле (предположим, что на cd есть несколько исполнителей):
// smarty
{foreach from=$cds item=cd}
<tr>
<td>{$cd->title}</td>
<td><ul>
{foreach from=$cd->artist item=$ar}
<li>{$ar}</li>
{/foreach}
</ul></td>
</tr>
{/foreach}
когда я предпочитаю
// dwoo
{foreach from=$cds}
<tr>
<td>{$title}</td>
<td><ul>
{foreach from=$artist}
<li>{$}</li>
{/foreach}
</ul></td>
</tr>
{/foreach}
Также, если у меня также есть коллекция музыки на кассетах, я могу повторить ее с тем же кодом:
// dwoo
{foreach from=$mcs}
<tr>
<td>{$title}</td>
<td><ul>
{foreach from=$artist}
<li>{$}</li>
{/foreach}
</ul></td>
</tr>
{/foreach}
Я не знаю, еслиЯ мог бы использовать одно и то же имя для переменной цикла снова и снова, как здесь:
// smarty, buggy?
{foreach from=$mcs item=o}
<tr>
<td>{$o->title}</td>
<td><ul>
{foreach from=$o->artist item=o}
<li>{$o}</li>
{/foreach}
</ul></td>
<td>{$o->title}</td>
</tr>
{/foreach}
Но я полагаю, что внутренний $ o перезаписал бы внешний $ o