/** * Menu items list - by menu_id * * @param int $menu_id * @return string */ public function lists($menu_id, $localeCode = '') { $locale = $localeCode != '' ? $localeCode : config_item('selected_locale'); $menu_items = $this->menu_items->where(['menu_id' => $menu_id, 'locale' => $locale])->order_by('sort')->get_all(); $menu_items_parents = $this->menu_items->prepare_parent_array($menu_items); // Get pages list $pages = $this->page_translations->where('locale', $locale)->get_all(); // Set view data $data['menu_items'] = generate_menu_tree($menu_items_parents, 0, [], 100, 0, ['pages' => obj_to_options_array($pages, 'id', 'title')]); if ($this->input->is_ajax_request()) { $this->render('menu/items/index', $data); } else { return $this->render('menu/items/index', $data, true); } }
/** * Generate HTML with menu tree * * @param array $items - array (key = id_parent) * @param int $id_parent - start id parent * @param array $active_path - full path of current category * @param int $max_level - maximum level * @param int $level - current level */ function generate_menu_tree($items, $id_parent, $active_path = array(), $max_level = 100, $level = 0, $data_arrays = []) { $result = ''; $id_parent = (int) $id_parent; if (isset($items[$id_parent]) && $max_level > $level) { foreach ($items[$id_parent] as $item) { // Items with children if (isset($items[$item->id]) && count($items[$item->id]) > 0) { $result .= '<li id="item_' . $item->id . '">' . PHP_EOL; $result .= generate_menu_item_content($item, $data_arrays); $result .= '<ol class="subtree">' . PHP_EOL; $result .= generate_menu_tree($items, $item->id, $active_path, $max_level, $level + 1, $data_arrays); $result .= '</ol>' . PHP_EOL; $result .= '</li>' . PHP_EOL; } else { $result .= '<li id="item_' . $item->id . '">' . PHP_EOL; $result .= generate_menu_item_content($item, $data_arrays); $result .= '</li>' . PHP_EOL; } } } return $result; }