MenuTreeStorage::getRootPathIds

public MenuTreeStorage::getRootPathIds($id)

Returns all the IDs that represent the path to the root of the tree.

  array(
    'p1' => 1,
    'p2' => 6,
    'p3' => 8,
    'p4' => 0,
    'p5' => 0,
    'p6' => 0,
    'p7' => 0,
    'p8' => 0,
    'p9' => 0
  )

Parameters

string $id: A menu link ID.

Return value

array An associative array of IDs with keys equal to values that represents the path from the given ID to the root of the tree. If $id is an ID that exists, the returned array will at least include it. An empty array is returned if the ID does not exist in the storage. An example $id (8) with two parents (1, 6) looks like the following:

Overrides MenuTreeStorageInterface::getRootPathIds

File

core/lib/Drupal/Core/Menu/MenuTreeStorage.php, line 759

Class

MenuTreeStorage
Provides a menu tree storage using the database.

Namespace

Drupal\Core\Menu

Code

public function getRootPathIds($id) {
  $subquery = $this->connection->select($this->table, $this->options);
  // @todo Consider making this dynamic based on static::MAX_DEPTH or from the
  //   schema if that is generated using static::MAX_DEPTH.
  //   https://www.drupal.org/node/2302043
  $subquery->fields($this->table, array('p1', 'p2', 'p3', 'p4', 'p5', 'p6', 'p7', 'p8', 'p9'));
  $subquery->condition('id', $id);
  $result = current($subquery->execute()->fetchAll(\PDO::FETCH_ASSOC));
  $ids = array_filter($result);
  if ($ids) {
    $query = $this->connection->select($this->table, $this->options);
    $query->fields($this->table, array('id'));
    $query->orderBy('depth', 'DESC');
    $query->condition('mlid', $ids, 'IN');
    // @todo Cache this result in memory if we find it is being used more
    //   than once per page load. https://www.drupal.org/node/2302185
    return $this->safeExecuteSelect($query)->fetchAllKeyed(0, 0);
  }
  return array();
}
doc_Drupal
2016-10-29 09:27:37
Comments
Leave a Comment

Please login to continue.