W3cubDocs

/Drupal 8

public function MenuTreeStorage::loadTreeData

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;
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Menu!MenuTreeStorage.php/function/MenuTreeStorage::loadTreeData/8.1.x