/** * Render a menu item (usually as a link) * * @param ElggMenuItem $item The menu item * @param array $vars Options to pass to output/url if a link * @return string * @since 1.9.0 */ function elgg_view_menu_item(ElggMenuItem $item, array $vars = array()) { if (!isset($vars['class'])) { $vars['class'] = 'elgg-menu-content'; } $vars = array_merge($item->getValues(), $vars); if ($item->getLinkClass()) { $vars['class'] .= ' ' . $item->getLinkClass(); } if ($item->getHref() === false) { $text = $item->getText(); // if contains elements, don't wrap if (preg_match('~<[a-z]~', $text)) { return $text; } else { return elgg_format_element('span', array('class' => 'elgg-non-link'), $text); } } if (!isset($vars['rel']) && !isset($vars['is_trusted'])) { $vars['is_trusted'] = true; } if ($item->getConfirmText()) { $vars['confirm'] = $item->getConfirmText(); return elgg_view('output/confirmlink', $vars); } else { unset($vars['confirm']); } return elgg_view('output/url', $vars); }
/** * 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; }
public function testConstructorUrlNormalization() { $item = new \ElggMenuItem('name', 'text', 'url'); $url = elgg_normalize_url('url'); $this->assertEquals($url, $item->getHref()); }