隐藏在循环内的Smarty值

时间:2013-01-29 16:56:50

标签: php recursion smarty

我有以下聪明的结构(我已经删除了不必要的检查和可视化):

[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 数组中推送元素?

1 个答案:

答案 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中创建数组。