在 Smarty 模板中迭代多维关联数组

发布于 2025-01-01 16:18:05 字数 1690 浏览 0 评论 0原文

在使用 Smarty 的 PHP 应用程序中,我想将一个多维关联数组(其中包含描述项目和项目组的值)传递给模板并将其显示为列表。

我在 script.php 中做了类似的事情:

$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);

我在主模板文件中使用它:

{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”数组。我做错了什么?

预先感谢您的任何帮助。

in a PHP application that uses Smarty I'd like to pass a multidimensional associative array with values describing items and groups of items to a template and display it as a list.

I do something like this in script.php:

$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);

And I'm using it in main template file:

{include file="display_data.tpl" data="$data"}

And in 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}

But the effect is only:

<ol>
    <li>Group 1 (group)</li>
    <li>Item 4 (item)</li>
</ol>

In any way I cannot get it iterating over the internal 'items' array. What am I doing wrong?

Thanks in advance for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沦落红尘 2025-01-08 16:18:05

我认为“子”项目的标记应该是:

{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}

希望这可以进一步帮助您

I think the markup for 'sub' items should be:

{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}

Hopes this helps you further

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文