/** * @return array * Array containing Devel Menu links */ protected function develMenuLinks() { $parameters = new MenuTreeParameters(); $parameters->setMaxDepth(1)->onlyEnabledLinks(); $tree = $this->menuLinkTree->load('devel', $parameters); $manipulators = array(array('callable' => 'menu.default_tree_manipulators:checkAccess'), array('callable' => 'menu.default_tree_manipulators:generateIndexAndSort')); $tree = $this->menuLinkTree->transform($tree, $manipulators); $links = array(); foreach ($tree as $item) { if ($item->access->isAllowed()) { $links[] = array('title' => $item->link->getTitle(), 'description' => $item->link->getDescription(), 'url' => $item->link->getUrlObject()->toString()); } } return $links; }
/** * {@inheritdoc} */ public function getParentSelectOptions($id = '', array $menus = NULL) { if (!isset($menus)) { $menus = $this->getMenuOptions(); } $options = array(); $depth_limit = $this->getParentDepthLimit($id); foreach ($menus as $menu_name => $menu_title) { $options[$menu_name . ':'] = '<' . $menu_title . '>'; $parameters = new MenuTreeParameters(); $parameters->setMaxDepth($depth_limit); $tree = $this->menuLinkTree->load($menu_name, $parameters); $manipulators = array(array('callable' => 'menu.default_tree_manipulators:checkAccess'), array('callable' => 'menu.default_tree_manipulators:generateIndexAndSort')); $tree = $this->menuLinkTree->transform($tree, $manipulators); $this->parentSelectOptionsTreeWalk($tree, $menu_name, '--', $options, $id, $depth_limit); } return $options; }
/** * Generates menu links in a tree structure. */ protected function generateLinks($num_links, $menus, $title_length, $link_types, $max_depth, $max_width) { $links = array(); $menus = array_keys(array_filter($menus)); $link_types = array_keys(array_filter($link_types)); $nids = array(); for ($i = 1; $i <= $num_links; $i++) { // Pick a random menu. $menu_name = $menus[array_rand($menus)]; // Build up our link. $link_title = $this->getRandom()->word(mt_rand(2, max(2, $title_length))); $link = $this->menuLinkContentStorage->create(array('menu_name' => $menu_name, 'weight' => mt_rand(-50, 50), 'title' => $link_title, 'bundle' => 'menu_link_content', 'description' => $this->t('Description of @title.', array('@title' => $link_title)))); $link->link->options = array('devel' => TRUE); // For the first $max_width items, make first level links. if ($i <= $max_width) { $depth = 0; } else { // Otherwise, get a random parent menu depth. $depth = mt_rand(1, max(1, $max_depth - 1)); } // Get a random parent link from the proper depth. do { $parameters = new MenuTreeParameters(); $parameters->setMinDepth($depth); $parameters->setMaxDepth($depth); $tree = $this->menuLinkTree->load($menu_name, $parameters); if ($tree) { $link->parent = array_rand($tree); } $depth--; } while (!$link->parent && $depth > 0); $link_type = array_rand($link_types); switch ($link_types[$link_type]) { case 'node': // Grab a random node ID. $select = db_select('node_field_data', 'n')->fields('n', array('nid', 'title'))->condition('n.status', 1)->range(0, 1)->orderRandom(); // Don't put a node into the menu twice. if (!empty($nids[$menu_name])) { $select->condition('n.nid', $nids[$menu_name], 'NOT IN'); } $node = $select->execute()->fetchAssoc(); if (isset($node['nid'])) { $nids[$menu_name][] = $node['nid']; $link->link->uri = 'entity:node/' . $node['nid']; $link->title = $node['title']; break; } case 'external': $link->link->uri = 'http://www.example.com/'; break; case 'front': $link->link->uri = 'internal:/<front>'; break; default: $link->devel_link_type = $link_type; break; } $link->save(); $links[$link->id()] = $link->link_title; } return $links; }