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バージョンを使用しているのかはわかりません。smarty3の場合は、含まれているテンプレートのスコープを「scope」で変更してみてください。

{include file="layouts/comments_deepscan.htm" scope=parent ... }

また、{function}:http : //www.smarty.net/docs/en/language.function.function.tplも見ていきます。これは、あなたがやろうとしていることに対するはるかに優れたソリューションです。

smarty 2を使用している場合、それはできないと思います。

ただし、smartyはプレゼンテーション指向のテンプレートシステムであり、(実行できる場合でも)phpでデータを処理し、そこから配列を作成するこのすべての論理演算を実行する方が高速で望ましいことに注意してください。

于 2013-01-30T12:19:23.880 に答える