public MenuLinkTree::build(array $tree)
Builds a renderable array from a menu tree.
The menu item's LI element is given one of the following classes:
- expanded: The menu item is showing its submenu.
- collapsed: The menu item has a submenu that is not shown.
- leaf: The menu item has no submenu.
Parameters
\Drupal\Core\Menu\MenuLinkTreeElement[] $tree: A data structure representing the tree, as returned from MenuLinkTreeInterface::load().
Return value
array A renderable array.
Overrides MenuLinkTreeInterface::build
File
- core/lib/Drupal/Core/Menu/MenuLinkTree.php, line 150
Class
- MenuLinkTree
- Implements the loading, transforming and rendering of menu link trees.
Namespace
Drupal\Core\Menu
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | public function build( array $tree ) { $tree_access_cacheability = new CacheableMetadata(); $tree_link_cacheability = new CacheableMetadata(); $items = $this ->buildItems( $tree , $tree_access_cacheability , $tree_link_cacheability ); $build = []; // Apply the tree-wide gathered access cacheability metadata and link // cacheability metadata to the render array. This ensures that the // rendered menu is varied by the cache contexts that the access results // and (dynamic) links depended upon, and invalidated by the cache tags // that may change the values of the access results and links. $tree_cacheability = $tree_access_cacheability ->merge( $tree_link_cacheability ); $tree_cacheability ->applyTo( $build ); if ( $items ) { // Make sure drupal_render() does not re-order the links. $build [ '#sorted' ] = TRUE; // Get the menu name from the last link. $item = end ( $items ); $link = $item [ 'original_link' ]; $menu_name = $link ->getMenuName(); // Add the theme wrapper for outer markup. // Allow menu-specific theme overrides. $build [ '#theme' ] = 'menu__' . strtr ( $menu_name , '-' , '_' ); $build [ '#menu_name' ] = $menu_name ; $build [ '#items' ] = $items ; // Set cache tag. $build [ '#cache' ][ 'tags' ][] = 'config:system.menu.' . $menu_name ; } return $build ; } |
Please login to continue.