我有一个智能模板文件,在其中循环遍历由嵌套数组表示的分层数据。子数据的表示方式与父数据完全相同,因此我希望递归地
{include}
要呈现此内容的Smarty模板:
“my.tpl”的来源
:
{foreach from=$children item="child" name="childrenLoop"}
{* display stuff here *}
{if $smarty.foreach.childrenLoop.last}
{* do something special here when it is the last item *}
{/if}
{assign var="grandChildren" value=$child->getChildren()}
{if $grandChildren|@count > 0}
{include file="my.tpl" children=$grandChildren}
{/if}
{/foreach}
我的问题是当
{包含}
完成执行,
$smarty.foreach.childrenLoop.*
告诉我关于
{include}'s
循环,而不是当前循环。所以如果内环有10个项目,外环有5个,
{$smarty.foreach.childrenLoop.total}
当我退出内环时是10,而不是5。不用说,这把我的产出搞得一团糟。
我想我可以通过在循环中使用include传递的值来绕过这个问题。我似乎能够正确地命名循环:
{foreach from=$children item="child" name="childrenLoop_`$suffix`"}
…但是我不知道如何访问它的属性,而且Smarty手册没有帮助:
{$smarty.foreach.childrenLoop_$suffix.total} {* NOPE! *}
{$smarty.foreach[childrenLoop_$suffix].total} {* NOPE! *}
我能在这里做什么?