1
Smartyを使用するPHPアプリケーションでは、多次元連想配列にアイテムやアイテムのグループを記述する値をテンプレートに渡して、リストとして表示したいと考えています。Smartyの多次元連想配列を反復する
$data = array(
array(
'type' => 'group',
'name' => 'Group 1',
'items' => array(
array(
'type' => 'group',
'name' => 'Group 2',
'items' => array(
array(
'type' => 'item',
'name' => 'Item 1'
),
array(
'type' => 'item',
'name' => 'Item 2'
)
)
),
array(
'type' => 'item',
'name' => 'Item 3'
)
)
),
array(
'type' => 'item',
'name' => 'Item 4'
)
);
$smarty->assign('data', $data);
そして、私はメインのテンプレートファイルにそれを使用しています:
私はscript.phpにこのような何かを
{include file="display_data.tpl" data="$data"}
そしてdisplay_data.tpl中:
{if $data.type eq 'item'}
<li>{$data.name} ({$data.type})</li>
{elseif $data.type eq 'group'}
<li>
{$data.name} ({$data.type})
{include file="display_data.tpl" data=$data.items}
</li>
{else}
<ol>
{foreach from=$data key=k item=i}
{include file="display_data.tpl" data=$data[$k]}
{/foreach}
</ol>
{/if}
ただし、効果は次のとおりです。
<ol>
<li>Group 1 (group)</li>
<li>Item 4 (item)</li>
</ol>
どのような意味でも、私は内部 'items'配列を反復することはできません。私は間違って何をしていますか?
ご協力いただきありがとうございます。
感謝を助け
期待しています。この方法は、問題の例のようにアイテムツリーの最大深さを知っている場合に機能します。しかし、私が実際にやろうとしていたものの、動作させることができなかったのは、ツリーの深さを処理することでした。これが再帰テンプレートを使用する理由です。この問題に関するアイデアですか? – user485332