/** * Prepare menu * Returns an array of section => items pairs * * @param ElggMenuItem[] $menu Menu * @param array $params Menu params * @return array */ function menus_api_prepare_menu($menu, array $params = []) { $menu_name = elgg_extract('name', $params); $sort_by = elgg_extract('sort_by', $params, 'text'); $builder = new \ElggMenuBuilder($menu); $params['menu'] = $builder->getMenu($sort_by); $params['selected_item'] = $builder->getSelected(); return elgg_trigger_plugin_hook('prepare', "menu:{$menu_name}", $params, $params['menu']); }
/** * Build the select options for the edit form * * @param int $entity_guid the current entity being edited (optional) * * @return array the parent select dropdown options */ function menu_builder_get_parent_menu_select_options($entity_guid = 0) { $result = false; $entity_guid = sanitise_int($entity_guid, false); // build the menu structure $vars = array(); $menu = array(); $menu = elgg_trigger_plugin_hook("register", "menu:site", $vars, $menu); $builder = new ElggMenuBuilder($menu); $vars["menu"] = $builder->getMenu("text"); $vars["selected_item"] = $builder->getSelected(); // Let plugins modify the menu $vars["menu"] = elgg_trigger_plugin_hook("prepare", "menu:site", $vars, $vars["menu"]); if (!empty($vars["menu"])) { $result = array(); foreach ($vars["menu"] as $section => $menu_items) { if (!empty($menu_items) && is_array($menu_items)) { $result = menu_builder_get_menu_select_option($menu_items, $entity_guid); } } } return $result; }
/** * Render a menu * * @see elgg_register_menu_item() for documentation on adding menu items and * navigation.php for information on the different menus available. * * This function triggers a 'register', 'menu:<menu name>' plugin hook that enables * plugins to add menu items just before a menu is rendered. This is used by * dynamic menus (menus that change based on some input such as the user hover * menu). Using elgg_register_menu_item() in response to the hook can cause * incorrect links to show up. See the blog plugin's blog_owner_block_menu() * for an example of using this plugin hook. * * An additional hook is the 'prepare', 'menu:<menu name>' which enables plugins * to modify the structure of the menu (sort it, remove items, set variables on * the menu items). * * elgg_view_menu() uses views in navigation/menu * * @param string $menu_name The name of the menu * @param array $vars An associative array of display options for the menu. * Options include: * sort_by => string or php callback * string options: 'name', 'priority', 'title' (default), * 'register' (registration order) or a * php callback (a compare function for usort) * handler: string the page handler to build action URLs * entity: ElggEntity to use to build action URLs * class: string the class for the entire menu. * show_section_headers: bool show headers before menu sections. * * @return string * @since 1.8.0 */ function elgg_view_menu($menu_name, array $vars = array()) { global $CONFIG; $vars['name'] = $menu_name; $sort_by = elgg_extract('sort_by', $vars, 'text'); if (isset($CONFIG->menus[$menu_name])) { $menu = $CONFIG->menus[$menu_name]; } else { $menu = array(); } // Give plugins a chance to add menu items just before creation. // This supports dynamic menus (example: user_hover). $menu = elgg_trigger_plugin_hook('register', "menu:{$menu_name}", $vars, $menu); $builder = new ElggMenuBuilder($menu); $vars['menu'] = $builder->getMenu($sort_by); $vars['selected_item'] = $builder->getSelected(); // Let plugins modify the menu $vars['menu'] = elgg_trigger_plugin_hook('prepare', "menu:{$menu_name}", $vars, $vars['menu']); if (elgg_view_exists("navigation/menu/{$menu_name}")) { return elgg_view("navigation/menu/{$menu_name}", $vars); } else { return elgg_view("navigation/menu/default", $vars); } }
<?php //This needs it own function, should not be loaded from here $menu_name = 'site'; $vars['name'] = $menu_name; $sort_by = elgg_extract('sort_by', $vars, 'text'); if (isset($CONFIG->menus[$menu_name])) { $menu = $CONFIG->menus[$menu_name]; } else { $menu = array(); } // Give plugins a chance to add menu items just before creation. // This supports dynamic menus (example: user_hover). $menu = elgg_trigger_plugin_hook('register', "menu:{$menu_name}", $vars, $menu); $builder = new ElggMenuBuilder($menu); $vars['menu'] = $builder->getMenu($sort_by); $vars['selected_item'] = $builder->getSelected(); // Let plugins modify the menu $vars['menu'] = elgg_trigger_plugin_hook('prepare', "menu:{$menu_name}", $vars, $vars['menu']); $default_items = elgg_extract('default', $vars['menu'], array()); $more_items = elgg_extract('more', $vars['menu'], array()); $all_items = array_merge($default_items, $more_items); foreach ($all_items as $menu_item) { echo elgg_view('navigation/menu/elements/item', array('item' => $menu_item)); } //Loggedin? $user = elgg_get_logged_in_user_entity(); if ($user) { ?> <li><a href="<?php echo elgg_get_site_url(); ?>