public function menu()
{
return _class('html')->menu([
11 => [
'name' => 'Tools',
],
22 => [
'link' => '#blocks',
'name' => 'Blocks editor',
'parent_id' => 11,
],
33 => [
'link' => '#file_manager',
'name' => 'File manager',
'parent_id' => 11,
],
44 => [
'name' => 'Administration',
],
55 => [
'link' => '#admin',
'name' => 'Admin accounts',
'parent_id' => 44,
],
66 => [
'link' => '#admin_groups',
'name' => 'Admin groups',
'parent_id' => 44,
],
77 => [
'link' => '#admin_modules',
'name' => 'Admin modules',
'parent_id' => 44,
],
88 => [
'name' => 'Users',
'parent_id' => 44,
],
99 => [
'link' => '#manage_users',
'name' => 'User accounts',
'parent_id' => 88,
],
101 => [
'link' => '#user_groups',
'name' => 'User groups',
'parent_id' => 88,
],
102 => [
'link' => '#user_modules',
'name' => 'User modules',
'parent_id' => 88,
],
103 => [
'name' => 'Content',
],
104 => [
'link' => '#static_pages',
'name' => 'Static pages',
'parent_id' => 103,
],
105 => [
'link' => '#manage_news',
'name' => 'News',
'parent_id' => 103,
],
106 => [
'link' => '#manage_comments',
'name' => 'Comments',
'parent_id' => 103,
],
]);
}
public function menu($data = [], $extra = [])
{
if ($this->_is_bs5) {
return $this->_bs5()->menu($data, $extra);
}
$extra['id'] = ($extra['id'] ?? null) ?: __FUNCTION__ . '_' . ($this->_ids[__FUNCTION__] = ($this->_ids[__FUNCTION__] ?? 0) + 1);
if ($data) {
$data = $this->_recursive_sort_items($data);
}
$keys = array_keys($data);
$keys_counter = array_flip($keys);
$items = [];
$ul_opened = false;
foreach ((array) $data as $id => $item) {
$next_key = $keys[$keys_counter[$id] + 1] ?? null;
$next_item = $next_key !== null ? ($data[$next_key] ?? null) : null;
$has_children = false;
$close_li = 1;
$close_ul = 0;
if ($next_item) {
if (($next_item['level'] ?? null) > ($item['level'] ?? null)) {
$has_children = true;
}
$close_li = ($item['level'] ?? null) - ($next_item['level'] ?? null) + 1;
if ($close_li < 0) {
$close_li = 0;
}
}
$badge = ($item['badge'] ?? null) ? ' <sup class="badge badge-' . (($item['class_badge'] ?? null) ?: 'info') . '">' . ($item['badge'] ?? null) . '</sup>' : '';
$items[] = '
<li class="dropdown">
<a href="' . ($item['link'] ?? null) . '" class="dropdown-toggle">' . ($item['name'] ?? null) . $badge . ($has_children ? ' <b class="caret"></b>' : '') . '</a>';
if ($has_children) {
$ul_opened = true;
$items[] = PHP_EOL . '<ul class="dropdown-menu sub-menu">' . PHP_EOL;
} elseif ($close_li) {
if ($ul_opened && ! $has_children && ($item['level'] ?? null) != ($next_item['level'] ?? null)) {
$ul_opened = false;
$close_ul = 1;
}
$tmp = str_repeat(PHP_EOL . ($close_ul ? '</li></ul>' : '</li>') . PHP_EOL, $close_li);
if ($close_li > 1 && $close_ul) {
$tmp = substr($tmp, 0, -strlen('</ul>' . PHP_EOL)) . PHP_EOL;
}
$items[] = $tmp;
}
}
return '<div class="navbar navbar-default' . (($extra['class'] ?? null) ? ' ' . ($extra['class'] ?? null) : '') . '" id="' . ($extra['id'] ?? null) . '">
<div class="navbar-inner navbar-header">
<ul class="nav navbar-nav">' . implode(PHP_EOL, (array) $items) . '</ul>
</div>
</div>';
}