0

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

[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 )

但是,当循环完成时,第 [3] 行给了我一个空数组。我认为,$vip_comments在深度扫描循环中不可见,因此它创建了一个新的空数组并将数据推入其中。我试图将它作为这样的参考传递(但它不起作用):

{include file="layouts/comments_deepscan.htm" show_only=$comment.id vip_id=$comment.id vip_comments=&$vip_comments}

如何在第 [4] 行的$vip_comments数组中推送元素?

4

1 回答 1

1

您没有说您使用的是哪个 smarty 版本,对于 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.ini 中执行所有这些处理数据和创建数组的逻辑操作会更快、更可取。

于 2013-01-30T12:19:23.880 回答