我有以下聪明的结构(我已经删除了不必要的检查和可视化):
[4] {$vip_comments = array()}
{foreach from=$comments item=comment}
{include file="layouts/comments_deepscan.htm" show_only=$comment.id vip_id=$comment.id}
{/foreach}
[3] {$vip_comments|print_r:true}
comments_deepscan结构如下所示(我删除了不必要的检查和可视化):
{foreach from=$comments item=comment}
{if $comment.access_level == 5}
[1] {$vip_comments[$vip_id] = true}
[2] {$vip_comments|print_r:true}
{break}
{/if}
{include file="layouts/comments_deepscan.htm" show_only=$comment.id vip_id=$vip_id}
{/foreach}
在某些示例中,已调用[1]和[2]行,因此 $ vip_comments 如下所示:
Array ( [10446] => 1 )
然而,当循环完成row [3]给我一个空数组。我认为, $ vip_comments 在深度扫描循环中是不可见的,因此它会创建一个新的空数组并将数据推入其中。 我试图将它作为这样的参考传递(但它不起作用):
{include file="layouts/comments_deepscan.htm" show_only=$comment.id vip_id=$comment.id vip_comments=&$vip_comments}
如何在行[4]上的 $ vip_comments 数组中推送元素?
答案 0 :(得分:1)
你没有说你使用的是哪个聪明的版本,对于smarty 3,尝试用“范围”改变所包含模板的范围
{include file="layouts/comments_deepscan.htm" scope=parent ... }
我还会看一下{function}:http://www.smarty.net/docs/en/language.function.function.tpl,这对你要做的事情来说是一个更好的解决方案。
如果您使用的是smarty 2,我认为无法完成。
然而,请注意,smarty是一个面向表示的模板系统,并且(即使它可以完成)它更快,更可取做所有这些逻辑操作处理数据并在php中创建数组。