Smarty назначить и отобразить двумерный массив

Я хочу получить данные двухмерного массива и отобразить их в html-файле, используя smarty:
Идея заключается в следующем: мой массив содержит несколько массивов, каждый из которых содержит имя категории в первом смещении и прикрепленные ссылки на эту категорию

1-файл php

$categories_links = array();//array that contains some catgories name with the attached links
//some dummy data
$categorie1="Horror movies";
$link11="http://www.movie11.com";
$link12="http://www.movie12.com";
$link13="http://www.movie13.com";
$categories_links[] = array($categorie1, $link11, $link12,$link13);
$categorie2="Action movies";
$link21="http://www.movie21.com";
$link22="http://www.movie22.com";
$categories_links[] = array($categorie2, $link21, $link22);
$smarty->assign('categories_links' , $categories_links );
$smarty->display('file.html');

2-х файловый HTML

{foreach key=categorie item=categorie from=$categories_links}
foreach key=categorie item=categorie from=categorie}
<!--
1.display only the first item in every array as the category name
2.display the rest as the links attached to the above category

//-->
{/foreach}
{/foreach}

0

Решение

Я бы реорганизовал массив данных, чтобы использовать имя категории в качестве ключа.

$categories = array(
'Horror movies' => array(
'link1',
'link2',
/...
),
'Action movies' => array(
'link1',
'link2',
/...
),
);
$smarty->assign("categories", $categories);

Тогда вы можете легко использовать его в Smarty

{foreach from=$categories key=category item=links}
Category: {$category}
{foreach from=$links item=link}
{$link}
{/foreach}
{/foreach}

Гораздо проще использовать этот способ.

1

Другие решения

Предполагая, что вы используете Smarty 3 (вы ничего не упомянули о Smarty 2), вы можете использовать следующий код:

{foreach $categories_links as $categorie}
<p>
{foreach $categorie as $item}

{if $item@first}
<strong>Category name: {$item}</strong><br />
{else}
{$item}

{/if}
{/foreach}
</p>
{/foreach}

Выход для этого будет:

Category name: Horror movies
http://www.movie11.com http://www.movie12.com http://www.movie13.com

Category name: Action movies
http://www.movie21.com http://www.movie22.com

РЕДАКТИРОВАТЬ

Как вы упомянули в комментарии, вам нужно решение для Smarty 2, которое вы должны использовать в своем файле шаблона Smarty:

{foreach key=id item=categorie from=$categories_links}
<p>
{foreach item=item from=$categorie name=list}

{if $smarty.foreach.list.first}
<strong>Category name: {$item}</strong><br />
{else}
{$item}

{/if}
{/foreach}
</p>
{/foreach}

Это даст вам вывод:

Category name: Horror movies
http://www.movie11.com http://www.movie12.com http://www.movie13.com

Category name: Action movies
http://www.movie21.com http://www.movie22.com

(точно такой же, как в Smarty 3)

2

По вопросам рекламы [email protected]