You are here

public static function Toolbar::preRenderToolbar in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/toolbar/src/Element/Toolbar.php \Drupal\toolbar\Element\Toolbar::preRenderToolbar()
  2. 9 core/modules/toolbar/src/Element/Toolbar.php \Drupal\toolbar\Element\Toolbar::preRenderToolbar()

Builds the Toolbar as a structured array ready for rendering.

Since building the toolbar takes some time, it is done just prior to rendering to ensure that it is built only if it will be displayed.

Parameters

array $element: A renderable array.

Return value

array A renderable array.

See also

toolbar_page_top()

File

core/modules/toolbar/src/Element/Toolbar.php, line 63

Class

Toolbar
Provides a render element for the default Drupal toolbar.

Namespace

Drupal\toolbar\Element

Code

public static function preRenderToolbar($element) {

  // Get the configured breakpoints to switch from vertical to horizontal
  // toolbar presentation.
  $breakpoints = static::breakpointManager()
    ->getBreakpointsByGroup('toolbar');
  if (!empty($breakpoints)) {
    $media_queries = [];
    foreach ($breakpoints as $id => $breakpoint) {
      $media_queries[$id] = $breakpoint
        ->getMediaQuery();
    }
    $element['#attached']['drupalSettings']['toolbar']['breakpoints'] = $media_queries;
  }
  $module_handler = static::moduleHandler();

  // Get toolbar items from all modules that implement hook_toolbar().
  $items = $module_handler
    ->invokeAll('toolbar');

  // Allow for altering of hook_toolbar().
  $module_handler
    ->alter('toolbar', $items);

  // Sort the children.
  uasort($items, [
    '\\Drupal\\Component\\Utility\\SortArray',
    'sortByWeightProperty',
  ]);

  // Merge in the original toolbar values.
  $element = array_merge($element, $items);

  // Assign each item a unique ID, based on its key.
  foreach (Element::children($element) as $key) {
    $element[$key]['#id'] = Html::getId('toolbar-item-' . $key);
  }
  return $element;
}