2012-02-01 3 views
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> 

어떤 식 으로든 내부 '항목'배열을 반복 처리 할 수 ​​없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

미리 도움을 청하십시오.

답변

1

나는 '하위'항목에 대한 마크 업을해야한다고 생각 :

{foreach from=$data key=k item=i} 
    {$i.name} ({$i.type}) 
    {if $i.items} 
     {foreach from=$i.data key=k item=k} 
      {$k.name} ({$k.type}) 
      {if $k.items} 
       {foreach from=$k.data key=k item=z} 
        {$z.name} ({$z.type}) 
       {/foreach} 
      {/if} 
     {/foreach} 
    {/if} 
{/foreach} 

희망이 당신에게 답장을 더

+0

감사를하는 데 도움이됩니다. 이 방법은 문제의 주어진 예제에서와 같이 항목 트리의 최대 깊이를 알고있는 경우 작동합니다. 그러나 실제로 무엇을하려고했으나 작동시키지 못했습니다. 트리의 깊이를 처리하는 것이 었습니다. 이것이 재귀 템플릿을 사용하는 이유입니다. 이 문제에 대한 아이디어가 있습니까? – user485332

관련 문제