我有一个数组,我在php中使用递归函数创建,我不知道有多少维度,我如何在Smarty中使用?
我尝试使用此代码:
{foreach $myArr as $items}
<li>
{$items.title}
{if $item.submenu}
<ul>
{foreach $items.submenu as $items2}
<li>{$items2.title}</li>
{/foreach}
</ul>
{/if}
</li>
{/foreach}
但是这个代码只有2个级别,可能是我的数组有3个或4个或......级别。
更新
我找到了解决方案,在我的解决方案中我使用Smarty函数:
{function name=menu level=0}
<ul>
{foreach $data as $items}
<li>
<a href="{$items.url}">
{$items.title}
</a>
{if is_array($items.submenu)}
{menu data=$items.submenu level=$level+1}
{/if}
</li>
{/foreach}
</ul>
{/function}
{menu data=$menuItems}
答案 0 :(得分:0)
我会采用不同的方法。 我的建议: 而不是使用菜单创建数组。创建两个或一个类/ es。
First class是一个Menu类,它以键/值的方式保存项目。 第二类是菜单项。
通过这种方式,您可以通过模型中的函数调用完成所有必需的迭代/逻辑 和视图中的打印。
类似的东西:
class Menu {
protected $_items = array();
protected $_parent_child = array();
public function add_menu_item($name, $id, $parent_id) {
if (array_key_exists($id, $this->_items))
return;
$this->_items[$i] = array('name' => $name, 'id' => $id, 'parent' => $parent_id) // model with data
$this->_parent_child[$parent_id] = $this->_items[$id];
}
public function get_nodes_by_parent($id=null /*for root*/) {
if (array_key_exists($id, $this->_parent_child))
return $this->_parent_child[$id];
return array(); // or null or something
}
}
菜单模板:
{foreach($menuClass->get_nodes_by_parent() as $item ) {
<ul>
<li>{$item['name']}</li>
{include 'sub_cats' id=$item['id'], menuclass=$menuclass}
</ul>
{endforeach}
子类别模板:
{foreach($menuClass->get_nodes_by_parent($id) as $item ) {
<ul>
<li>{$item['name']}</li>
{include 'sub_cats' id=$item['id']}
</ul>
{endforeach}
这尚未完全完成,也未经过测试。但这将是我的方法。