我有一个数组,我在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}
我会采取不同的方法。我的建议:而不是用菜单创建数组。创建两个或一个类。
第一个类是一个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}
这还没有完全完成,也没有经过测试。但这就是我的方法