1 system.menu.inc | system_menu_block_build(array $config) |
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.
- 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.
- style: (string) The menu style used to render this menu.
- level: (int) The starting level of the tree. Some styles may ignore this setting.
- depth: (int) The maximum depth the tree should contain, relative to the starting level. Some styles may ignore this setting.
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.
File
- core/
modules/ system/ system.menu.inc, line 219 - Menu block configuration form and display.
Code
function system_menu_block_build(array $config) {
if (module_exists('menu')) {
$menu_names = menu_get_menus();
}
else {
$menu_names = menu_list_system_menus();
}
// Set defaults.
$menu_name = str_replace('_', '-', $config['menu_name']);
$config += system_menu_block_defaults($menu_name);
if (empty($config['style'])) {
$config['style'] = 'tree';
}
// Always expand dropdown style output.
if ($config['style'] === 'dropdown') {
$config['expand_all'] = TRUE;
}
// Get the default block name.
backdrop_static_reset('menu_block_set_title');
system_menu_block_set_title($menu_names[$menu_name]);
// Get the raw menu tree data.
$tree = system_menu_tree_block_data($config);
$title = system_menu_block_get_title();
$data = array();
$data['subject'] = $title;
$data['content'] = array();
// Create a renderable tree.
if (!empty($tree) && $output = menu_tree_output($tree)) {
$data['content'] = $output;
// Add any menu style (currently always "dropdown" if any).
if (!empty($config['style'])) {
$data['content']['#wrapper_attributes']['class'][] = 'menu-' . str_replace('_', '-', $config['style']);
$data['content']['#wrapper_attributes']['data-menu-style'] = $config['style'];
$data['content']['#wrapper_attributes']['data-clickdown'] = $config['clickdown'];
if (!empty($config['accordion'])) {
$collapsible_behavior = (empty($config['collapse']) || $config['collapse'] == 'default') ? 'accordion' : 'accordion-' . $config['collapse'];
}
else {
$collapsible_behavior = (empty($config['collapse'])) ? 'default' : $config['collapse'];
}
$data['content']['#wrapper_attributes']['data-collapse'] = $collapsible_behavior;
$data['content']['#attached']['library'][] = array(
'system',
'backdrop.menus',
);
if ($config['style'] === 'dropdown') {
$data['content']['#attached']['library'][] = array(
'system',
'smartmenus',
);
}
}
if (!empty($config['toggle']) && $config['toggle'] == TRUE) {
$id = backdrop_html_id('menu-toggle-state');
$data['content']['#wrapper_attributes']['data-menu-toggle-id'] = $id;
$data['content']['#prefix'] = theme('menu_toggle', array(
'enabled' => $config['toggle'],
'id' => $id,
// Allow the user-entered menu toggle text to be translated.
'text' => t(trim($config['toggle_text'])),
));
$data['content']['#attached']['library'][] = array(
'system',
'backdrop.menu-toggle',
);
}
if (!empty($config['style_settings'])) {
$data['content']['#wrapper_attributes']['data-menu-style'] = backdrop_json_encode($config['style_settings']);
}
}
return $data;
}