public MenuTreeStorage::loadTreeData($menu_name, MenuTreeParameters $parameters)
Loads a menu link tree from the storage.
This function may be used build the data for a menu tree only, for example to further massage the data manually before further processing happens. MenuLinkTree::checkAccess() needs to be invoked afterwards.
The tree order is maintained using an optimized algorithm, for example by storing each parent in an individual field, see https://www.drupal.org/node/141866 for more details. However, any details of the storage should not be relied upon since it may be swapped with a different implementation.
Parameters
string $menu_name: The name of the menu.
\Drupal\Core\Menu\MenuTreeParameters $parameters: The parameters to determine which menu links to be loaded into a tree.
Return value
array An array with 2 elements:
- tree: A fully built menu tree containing an array. @see static::treeDataRecursive()
- route_names: An array of all route names used in the tree.
Overrides MenuTreeStorageInterface::loadTreeData
File
- core/lib/Drupal/Core/Menu/MenuTreeStorage.php, line 830
Class
- MenuTreeStorage
- Provides a menu tree storage using the database.
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 | public function loadTreeData( $menu_name , MenuTreeParameters $parameters ) { // Build the cache ID; sort 'expanded' and 'conditions' to prevent duplicate // cache items. sort( $parameters ->expandedParents); asort( $parameters ->conditions); $tree_cid = "tree-data:$menu_name:" . serialize( $parameters ); $cache = $this ->menuCacheBackend->get( $tree_cid ); if ( $cache && isset( $cache ->data)) { $data = $cache ->data; // Cache the definitions in memory so they don't need to be loaded again. $this ->definitions += $data [ 'definitions' ]; unset( $data [ 'definitions' ]); } else { $links = $this ->loadLinks( $menu_name , $parameters ); $data [ 'tree' ] = $this ->doBuildTreeData( $links , $parameters ->activeTrail, $parameters ->minDepth); $data [ 'definitions' ] = array (); $data [ 'route_names' ] = $this ->collectRoutesAndDefinitions( $data [ 'tree' ], $data [ 'definitions' ]); $this ->menuCacheBackend->set( $tree_cid , $data , Cache::PERMANENT, [ 'config:system.menu.' . $menu_name ]); // The definitions were already added to $this->definitions in // $this->doBuildTreeData() unset( $data [ 'definitions' ]); } return $data ; } |
Please login to continue.