| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | <?php/** * @file * Hooks provided by the toolbar module. */use Drupal\Core\Url;/** * @addtogroup hooks * @{ *//** * 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 *   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 \Drupal\toolbar\Element\Toolbar::preRenderToolbar() * @ingroup toolbar_tabs */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' => [/* An item list renderable array */],      ],    ],    '#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' => [/* renderable content */],    ],    '#weight' => 125,  ];  return $items;}/** * Alter the toolbar menu after hook_toolbar() is invoked. * * This hook is invoked by Toolbar::preRenderToolbar() immediately after * hook_toolbar(). The toolbar definitions are passed in by reference. Each * element of the $items array is one item returned by a module from * hook_toolbar(). Additional items may be added, or existing items altered. * * @param $items *   Associative array of toolbar menu definitions returned from hook_toolbar(). */function hook_toolbar_alter(&$items) {  // Move the User tab to the right.  $items['commerce']['#weight'] = 5;}/** * @} End of "addtogroup hooks". */
 |