Этот вопрос связан с этим. Есть ли что-то вроде Dwoo-s {with} или {loop} в Smarty 3 или раньше?
В принципе, я хочу иметь что-то вроде текущего узла из шаблонов 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>
художник фактически ссылается на каталог / cd [1] / artist (и, конечно, [2], [3] … и так далее, если есть больше cd-s)
Текущий контекст, в котором имена полей понимаются внутри каждого блока.
Мне очень нравится эта функциональность. Вы знаете какой-либо популярный механизм шаблонов 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