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
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.