linkLevel = $level; // Overcome recursive infinite loop if ($level > 10000) { return; } // Process callable item if (is_callable($item)) { $item = call_user_func($item); } // Exit if item is null if ($item === null) { return; } // Handle menu item visiblity with callback function if (isset($item['hide'])) { if (is_callable($item['hide'])) { $hide = call_user_func($item['hide'], $this, $item); } else { $hide = $item['hide']; } if ($hide === true) { return; } } if (isset($item['sub']) && ($this->_matchParentItemByPath($item) === true)) { $classes[] = 'here show'; } if (isset($item['attributes']) && isset($item['attributes']['item'])) { $attributes = $item['attributes']['item']; } elseif (isset($item['attributes']) && isset($item['attributes']['link']) === false) { $attributes = $item['attributes']; } if (isset($item['classes']) && isset($item['classes']['item'])) { $classes[] = $item['classes']['item']; } echo '<' . $this->itemTag . ' ' . Util::getHtmlAttributes($attributes) . Util::getHtmlClass($classes) . '>'; if (isset($item['custom'])) { $this->_generateItemCustom($item); } if (isset($item['content'])) { $this->_generateItemContent($item); } if (isset($item['title']) || isset($item['breadcrumb-title'])) { $this->_generateItemLink($item); } if (isset($item['heading'])) { $this->_generateItemHeading($item); } if (isset($item['sub'])) { $this->_generateItemSub($item['sub'], $level++); } echo '' . $this->itemTag . '>'; } private function _generateItemLink($item) { $classes = array('menu-link'); $attributes = array(); $tag = 'a'; // Construct li ks attributes if (isset($item['path'])) { // Assign the page URL $attributes['href'] = Theme::getPageUrl($item['path']); // Handle open in new tab mode if (isset($item['new-tab']) && $item['new-tab'] === true) { $attributes['target'] = 'blank'; } // Add special attribute for links to pro pages if (Theme::isFreeVersion() === true && Theme::isProPage($item['path']) === true) { $attributes['data-kt-page'] = 'pro'; } } else { $tag = 'span'; } if (isset($item['attributes']) && isset($item['attributes']['link'])) { $attributes = array_merge($attributes, $item['attributes']['link']); } if ($this->_matchItemByPath($item) === true) { $classes[] = 'active'; } if (!empty($this->itemLinkClass)) { $classes[] = $this->itemLinkClass; } if (isset($item['classes']) && isset($item['classes']['link'])) { $classes[] = $item['classes']['link']; } echo '<' . $tag . Util::getHtmlClass($classes) . Util::getHtmlAttributes($attributes) . '>'; if ($this->displayIcons !== false) { $this->_generateItemLinkIcon($item); } $this->_generateItemLinkBullet($item); if (isset($item['title'])) { $this->_generateItemLinkTitle($item); } $this->_generateItemLinkBadge($item); if (isset($item['sub']) && @$item['arrow'] !== false) { if (!($this->hideRootArrow === true && $this->linkLevel === 0)) { $this->_generateItemLinkArrow($item); } } echo '' . $tag . '>'; } private function _generateItemLinkTitle($item) { $classes = array('menu-title'); if (isset($item['classes']) && isset($item['classes']['title'])) { $classes[] = $item['classes']['title']; } if (!is_string($item['title']) && is_callable($item['title'])) { $item['title'] = call_user_func($item['title'], $item); } echo ''; if (isset($this->callbacks['title']) && is_callable($this->callbacks['title'])) { echo call_user_func($this->callbacks['title'], $item, $item['title']); } else { echo __($item['title']); // Append exclusive badge if (isset($item['path']) && Theme::isExclusivePage($item['path']) === true) { echo 'Exclusive'; } // Append pro badge if (Theme::isFreeVersion()) { if ((isset($item['path']) && Theme::isProPage($item['path']) === true) || (isset($item['pro']) && $item['pro'] === true)) { echo 'Pro'; } } } echo ''; } private function _generateItemLinkIcon($item) { $classes = array('menu-icon'); if (isset($item['classes']) && isset($item['classes']['icon'])) { $classes[] = $item['classes']['icon']; } if (isset($item['icon'])) { echo ''; if ($this->linkLevel === 0 && !empty($this->iconRoot)) { echo $this->iconRoot; } else { if (is_array($item['icon'])) { echo $item['icon'][$this->iconType]; } else { echo $item['icon']; } } echo ''; return; } } private function _generateItemLinkBullet($item) { if (isset($item['icon']) === true && $this->displayIcons !== false) { return; } $classes = array('menu-bullet'); if (isset($item['classes']) && isset($item['classes']['bullet'])) { $classes[] = $item['classes']['bullet']; } if (isset($item['bullet'])) { echo ''; if (isset($item['bullet'])) { echo $item['bullet']; } echo ''; } } private function _generateItemLinkBadge($item) { $classes = array('menu-badge'); if (isset($item['classes']) && isset($item['classes']['badge'])) { $classes[] = $item['classes']['badge']; } if (isset($item['badge'])) { echo ''; echo $item['badge']; echo ''; } } private function _generateItemLinkArrow($item) { $classes = array('menu-arrow'); if (isset($item['classes']['arrow'])) { $classes[] = $item['classes']['arrow']; } echo ''; echo ''; } private function _generateItemSub($sub, $level) { $classes = array('menu-sub'); if (isset($sub['class'])) { $classes[] = $sub['class']; } echo '<' . $this->parentTag . ' ' . Util::getHtmlClass($classes) . '>'; if (isset($sub['view'])) { Theme::getView($sub['view']); } else { foreach ($sub['items'] as $item) { $this->_generateItem($item, $level++); } } echo '' . $this->parentTag . '>'; } private function _generateItemHeading($item) { $classes = array('menu-content'); if (isset($item['heading'])) { if (isset($this->callbacks['heading']) && is_callable($this->callbacks['heading'])) { echo call_user_func($this->callbacks['heading'], $item['heading']); } else { echo '