function hook_toolbar

Same name in other branches
  1. 9 core/modules/toolbar/toolbar.api.php \hook_toolbar()
  2. 10 core/modules/toolbar/toolbar.api.php \hook_toolbar()
  3. 11.x core/modules/toolbar/toolbar.api.php \hook_toolbar()

Add items to the toolbar menu.

The toolbar is a container for administrative and site-global interactive components.

The toolbar provides a common styling for items denoted by the .toolbar-tab class.

The toolbar provides a construct called a 'tray'. The tray is a container for content. The tray may be associated with a toggle in the administration bar. The toggle shows or hides the tray and is optimized for small and large screens. To create this association, hook_toolbar() returns one or more render elements of type 'toolbar_item', containing the toggle and tray elements in its 'tab' and 'tray' properties.

The following properties are available:

  • 'tab': A renderable array.
  • 'tray': Optional. A renderable array.
  • '#weight': Optional. Integer weight used for sorting toolbar items in administration bar area.

This hook is invoked in Toolbar::preRenderToolbar().

Return value

An array of toolbar items, keyed by unique identifiers such as 'home' or 'administration', or the short name of the module implementing the hook. The corresponding value is a render element of type 'toolbar_item'.

See also

\Drupal\toolbar\Element\Toolbar::preRenderToolbar()

Related topics

11 functions implement hook_toolbar()

Note: this list is generated by pattern matching, so it may include some functions that are not actually implementations of this hook.

block_place_toolbar in core/modules/block_place/block_place.module
Implements hook_toolbar().
contextual_toolbar in core/modules/contextual/contextual.module
Implements hook_toolbar().
demo_umami_toolbar in core/profiles/demo_umami/demo_umami.profile
Implements hook_toolbar().
shortcut_toolbar in core/modules/shortcut/shortcut.module
Implements hook_toolbar().
template_preprocess_ckeditor_settings_toolbar in core/modules/ckeditor/ckeditor.admin.inc
Prepares variables for CKEditor settings toolbar templates.

... See full list

1 invocation of hook_toolbar()
Toolbar::preRenderToolbar in core/modules/toolbar/src/Element/Toolbar.php
Builds the Toolbar as a structured array ready for drupal_render().

File

core/modules/toolbar/toolbar.api.php, line 47

Code

function hook_toolbar() {
    $items = [];
    // Add a search field to the toolbar. The search field employs no toolbar
    // module theming functions.
    $items['global_search'] = [
        '#type' => 'toolbar_item',
        'tab' => [
            '#type' => 'search',
            '#attributes' => [
                'placeholder' => t('Search the site'),
                'class' => [
                    'search-global',
                ],
            ],
        ],
        '#weight' => 200,
        // Custom CSS, JS or a library can be associated with the toolbar item.
'#attached' => [
            'library' => [
                'search/global',
            ],
        ],
    ];
    // The 'Home' tab is a simple link, which is wrapped in markup associated
    // with a visual tab styling.
    $items['home'] = [
        '#type' => 'toolbar_item',
        'tab' => [
            '#type' => 'link',
            '#title' => t('Home'),
            '#url' => Url::fromRoute('<front>'),
            '#options' => [
                'attributes' => [
                    'title' => t('Home page'),
                    'class' => [
                        'toolbar-icon',
                        'toolbar-icon-home',
                    ],
                ],
            ],
        ],
        '#weight' => -20,
    ];
    // A tray may be associated with a tab.
    //
    // When the tab is activated, the tray will become visible, either in a
    // horizontal or vertical orientation on the screen.
    //
    // The tray should contain a renderable array. An optional #heading property
    // can be passed. This text is written to a heading tag in the tray as a
    // landmark for accessibility.
    $items['commerce'] = [
        '#type' => 'toolbar_item',
        'tab' => [
            '#type' => 'link',
            '#title' => t('Shopping cart'),
            '#url' => Url::fromRoute('cart'),
            '#options' => [
                'attributes' => [
                    'title' => t('Shopping cart'),
                ],
            ],
        ],
        'tray' => [
            '#heading' => t('Shopping cart actions'),
            'shopping_cart' => [
                '#theme' => 'item_list',
                '#items' => [],
            ],
        ],
        '#weight' => 150,
    ];
    // The tray can be used to render arbitrary content.
    //
    // A renderable array passed to the 'tray' property will be rendered outside
    // the administration bar but within the containing toolbar element.
    //
    // If the default behavior and styling of a toolbar tray is not desired, one
    // can render content to the toolbar element and apply custom theming and
    // behaviors.
    $items['user_messages'] = [
        // Include the toolbar_tab_wrapper to style the link like a toolbar tab.
        // Exclude the theme wrapper if custom styling is desired.
'#type' => 'toolbar_item',
        'tab' => [
            '#type' => 'link',
            '#theme' => 'user_message_toolbar_tab',
            '#theme_wrappers' => [],
            '#title' => t('Messages'),
            '#url' => Url::fromRoute('user.message'),
            '#options' => [
                'attributes' => [
                    'title' => t('Messages'),
                ],
            ],
        ],
        'tray' => [
            '#heading' => t('User messages'),
            'messages' => [],
        ],
        '#weight' => 125,
    ];
    return $items;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.