1.20.x system.menu.inc system_menu_tree_block_data(array &$config)

Gets the data structure representing a menu tree for the given configuration.

Parameters

array $config: See the $config param of menu_tree_build().

Return value

array:

File

modules/system/system.menu.inc, line 233

Code

function system_menu_tree_block_data(array &$config) {
  // @todo: Anything that makes adjustments based on style should come from
  // a menu style plugin.
  // See https://github.com/backdrop/backdrop-issues/issues/1457
  if ($config['style'] === 'top_only') {
    $config['level'] = 1;
    $config['depth'] = 1;
  }
  elseif ($config['style'] === 'dropdown') {
    $config['level'] = 1;
  }

  // Determine the max depth based on level and depth setting.
  $max_depth = ($config['depth'] == 0) ? NULL : min($config['level'] + $config['depth'] - 1, MENU_MAX_DEPTH);

  // Set the expand all flag if the style requires it.
  $expand_all = FALSE;
  if ($config['depth'] != 1) {
    if (isset($config['expand_all'])) {
      $expand_all = (bool) $config['expand_all'];
    }
    // Right now we assume if any style is set, the whole menu should be expanded.
    elseif ($config['style'] !== 'tree') {
      $expand_all = TRUE;
    }
  }

  // Get the menu tree based on the configuration options using the central
  // menu system cache.
  $tree = menu_tree_page_data($config['menu_name'], $max_depth, FALSE, $expand_all);

  // Allow alteration of the tree and config before we begin operations on it.
  backdrop_alter('menu_block_tree', $tree, $config);

  // Prune the tree along the active trail to the specified level.
  if ($config['level'] > 1) {
    system_menu_tree_prune_tree($tree, $config['level']);
  }

  // Trim the tree to the active path.
  if (!$expand_all) {
    system_menu_tree_trim_active_path($tree);
  }

  // Trim the branches that extend beyond the specified depth.
  if ($config['depth'] > 0) {
    system_menu_tree_depth_trim($tree, $config['depth']);
  }

  return $tree;
}