public function getMenuItem(ElggMenuItem $parent, $top_only = false) { if ($parent) { $menu_item = array('name' => "{$parent->getName()}:{$this->guid}", 'parent_name' => "{$parent->getName()}", 'text' => "<img class=\"hj-categories-tree-icon\" src=\"{$this->getIconURL('tiny')}\" width=\"12\" />" . $this->title . ' (' . $this->getFiledEntitiesCount() . ')', 'href' => $this->getURL(), 'class' => 'hj-categories-menu-child', 'priority' => $this->priority, 'data' => array('category_guid' => $this->guid)); } else { $menu_item = array('name' => "{$this->guid}", 'text' => "<img class=\"hj-categories-tree-icon\" src=\"{$this->getIconURL('tiny')}\" width=\"12\" />" . $this->title . ' (' . $this->getFiledEntitiesCount() . ')', 'href' => $this->getURL(), 'class' => 'hj-categories-menu-root', 'priority' => $this->priority, 'data' => array('category_guid' => $this->guid)); } $menu_item = ElggMenuItem::factory($menu_item); $return[] = $menu_item; // Empty menu item to create html markup if ($this->canEdit() && elgg_get_context() == 'category') { $add_new = array('name' => "{$menu_item->getName()}:addnew", 'parent_name' => "{$menu_item->getName()}", 'text' => '', 'item_class' => 'hidden', 'href' => false, 'priority' => 1); $return[] = ElggMenuItem::factory($add_new); } if (!$top_only) { $children = $this->getChildren(); if (is_array($children)) { foreach ($children as $child) { $submenu = $child->getMenuItem($menu_item); if (is_array($submenu)) { foreach ($submenu as $submenu_item) { $return[] = $submenu_item; } } } } } return $return; }
/** * Set up the site menu * * Handles default, featured, and custom menu items * * @access private */ function _elgg_site_menu_setup($hook, $type, $return, $params) { $featured_menu_names = elgg_get_config('site_featured_menu_names'); $custom_menu_items = elgg_get_config('site_custom_menu_items'); if ($featured_menu_names || $custom_menu_items) { // we have featured or custom menu items $registered = $return['default']; /* @var \ElggMenuItem[] $registered */ // set up featured menu items $featured = array(); foreach ($featured_menu_names as $name) { foreach ($registered as $index => $item) { if ($item->getName() == $name) { $featured[] = $item; unset($registered[$index]); } } } // add custom menu items $n = 1; foreach ($custom_menu_items as $title => $url) { $item = new \ElggMenuItem("custom{$n}", $title, $url); $featured[] = $item; $n++; } $return['default'] = $featured; if (count($registered) > 0) { $return['more'] = $registered; } } else { // no featured menu items set $max_display_items = 5; // the first n are shown, rest added to more list // if only one item on more menu, stick it with the rest $num_menu_items = count($return['default']); if ($num_menu_items > $max_display_items + 1) { $return['more'] = array_splice($return['default'], $max_display_items); } } // check if we have anything selected $selected = false; foreach ($return as $section) { /* @var \ElggMenuItem[] $section */ foreach ($section as $item) { if ($item->getSelected()) { $selected = true; break 2; } } } if (!$selected) { // nothing selected, match name to context or match url $current_url = current_page_url(); foreach ($return as $section_name => $section) { foreach ($section as $key => $item) { // only highlight internal links if (strpos($item->getHref(), elgg_get_site_url()) === 0) { if ($item->getName() == elgg_get_context()) { $return[$section_name][$key]->setSelected(true); break 2; } if ($item->getHref() == $current_url) { $return[$section_name][$key]->setSelected(true); break 2; } } } } } return $return; }
/** * Compare two menu items by their identifiers * * @param \ElggMenuItem $a Menu item * @param \ElggMenuItem $b Menu item * @return bool */ public static function compareByName($a, $b) { $an = $a->getName(); $bn = $b->getName(); $result = strnatcmp($an, $bn); if ($result === 0) { return $a->getData('original_order') - $b->getData('original_order'); } return $result; }