此问题与此Is there anything like Dwoo-s {with} or {loop} in Smarty 3 or earlier?
有关基本上我想从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] /艺术家(当然还有[2],[3] ......等等,如果还有更多的CD-s)
理解字段名称的当前上下文在每个块内部发生了变化。
我非常喜欢这个功能。你知道任何流行的PHP模板引擎(除了Dwoo)有这个功能吗?
更新
Tim Fountain建议:// 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
答案 0 :(得分:1)
PHP本身?
如果我理解正确,您需要此功能
<?php foreach($catalog as $cd): ?>
<tr>
<td><?php echo $cd['title'] ?>
<td><?php echo $cd['artist'] ?>
</tr>
<?php endforeach ?>
您可以在模板文件中单独使用它,让控制器创建$ catalog数组并将其传递给模板。
答案 1 :(得分:0)
这不仅仅是一个普通的foreach循环吗?因此,例如在Smarty中,等价物将是:
{foreach from=$cds item=cd}
<tr>
<td>{$cd->title}</td>
<td>{$cd->artist}</td>
</tr>
{/foreach}
但所有模板选项和PHP本身都可以做到这一点。
答案 2 :(得分:0)
恕我直言,省略“发明”名称更加令人困惑,因为没有提及数据来自何种范围。这很像PHP中非常滥用的extract()函数,它将数组提取到当前符号表,这使得代码很难管理。
答案 3 :(得分:0)
据我所知,具有此功能的唯一相当流行的开源模板引擎是Dwoo