У меня есть массив, который я создал в 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}
Но этот код предназначен только для двух уровней, может быть, у моего массива есть 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}
Я бы пошел другим путем. Мое предложение: вместо создания массивов с меню. Создайте два или один класс / es.
Первый класс – это класс меню, который содержит элементы в ключе / значении. Второй класс будет элементом меню.
Таким образом, все необходимые итерации / логические операции можно выполнить с помощью вызова функции в модели и печати в представлении.
что-то вроде:
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}
Это не полностью и не проверено. Но это был бы мой подход.