You are here

function menu_tree_build in Menu Block 7.2

Same name and namespace in other branches
  1. 6.2 menu_block.module \menu_tree_build()
  2. 7.3 menu_block.module \menu_tree_build()

Build a menu tree based on the provided configuration.

Parameters

array $config: An array of configuration options that specifies how to build the menu tree and its title.

  • delta: (string) The menu_block's block delta.
  • menu_name: (string) The machine name of the requested menu. Can also be set to MENU_TREE__CURRENT_PAGE_MENU to use the menu selected by the page.
  • parent_mlid: (int) The mlid of the item that should root the tree. Use 0 to use the menu's root.
  • title_link: (boolean) Specifies if the title should be rendered as a link or a simple string.
  • admin_title: (string) An optional title to uniquely identify the block on the administer blocks page.
  • level: (int) The starting level of the tree.
  • follow: (string) Specifies if the starting level should follow the active menu item. Should be set to 0, 'active' or 'child'.
  • depth: (int) The maximum depth the tree should contain, relative to the starting level.
  • expanded: (boolean) Specifies if the entire tree be expanded or not.
  • sort: (boolean) Specifies if the tree should be sorted with the active trail at the top of the tree.

Return value

array An associative array containing several pieces of data.

  • content: The tree as a renderable array.
  • subject: The title rendered as HTML.
  • subject_array: The title as a renderable array.
3 calls to menu_tree_build()
menu_block_block_view in ./menu_block.module
Implements hook_block_view().
menu_block_menu_tree_content_type_admin_info in plugins/content_types/menu_tree/menu_tree.inc
Callback to provide administrative info (the preview in panels when building a panel).
menu_block_menu_tree_content_type_render in plugins/content_types/menu_tree/menu_tree.inc
Renders a menu_tree content type based on the delta supplied in the configuration.

File

./menu_block.module, line 506
Provides configurable blocks of menu items.

Code

function menu_tree_build(array &$config) {

  // Retrieve the active menu item from the database.
  if ($config['menu_name'] == MENU_TREE__CURRENT_PAGE_MENU) {
    $config['menu_name'] = menu_block_get_current_page_menu();
    $config['parent_mlid'] = 0;

    // If no menu link was found, don't display the block.
    if (empty($config['menu_name'])) {
      return array(
        'subject' => t('The menu selected by the page'),
        'subject_array' => array(),
        'content' => array(),
      );
    }
  }

  // Get the default block name.
  drupal_static_reset('menu_block_set_title');
  $menu_names = menu_block_get_all_menus();
  menu_block_set_title($menu_names[$config['menu_name']]);

  // Get the raw menu tree data.
  $tree = menu_tree_block_data($config);
  $title = menu_block_get_title($config['title_link']);

  // Create a renderable tree.
  $data = array();
  $data['subject_array'] = $title;
  $data['subject'] = drupal_render($title);
  $data['content'] = array();
  if (!empty($tree) || !empty($config['display_empty'])) {
    if ($output = menu_block_tree_output($tree, $config)) {
      $data['content']['#content'] = $output;
      $data['content']['#theme'] = array(
        'menu_block_wrapper__' . str_replace('-', '_', $config['delta']),
        'menu_block_wrapper__' . str_replace('-', '_', $config['menu_name']),
        'menu_block_wrapper',
      );
    }
    else {
      $data['content']['#content'] = NULL;
    }
    $data['content']['#config'] = $config;
    $data['content']['#delta'] = $config['delta'];
  }
  return $data;
}