You are here

function template_preprocess_toolbar in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/toolbar/toolbar.module \template_preprocess_toolbar()

Prepares variables for administration toolbar templates.

Default template: toolbar.html.twig.

Parameters

array $variables: An associative array containing:

  • element: An associative array containing the properties and children of the tray. Properties used: #children, #attributes and #bar.

File

core/modules/toolbar/toolbar.module, line 76
Administration toolbar for quick access to top level administration items.

Code

function template_preprocess_toolbar(&$variables) {
  $element = $variables['element'];

  // Prepare the toolbar attributes.
  $variables['attributes'] = $element['#attributes'];
  $variables['toolbar_attributes'] = new Attribute($element['#bar']['#attributes']);
  $variables['toolbar_heading'] = $element['#bar']['#heading'];

  // Prepare the trays and tabs for each toolbar item as well as the remainder
  // variable that will hold any non-tray, non-tab elements.
  $variables['trays'] = [];
  $variables['tabs'] = [];
  $variables['remainder'] = [];
  foreach (Element::children($element) as $key) {

    // Early rendering to collect the wrapper attributes from
    // ToolbarItem elements.
    if (!empty($element[$key])) {
      Drupal::service('renderer')
        ->render($element[$key]);
    }

    // Add the tray.
    if (isset($element[$key]['tray'])) {
      $attributes = [];
      if (!empty($element[$key]['tray']['#wrapper_attributes'])) {
        $attributes = $element[$key]['tray']['#wrapper_attributes'];
      }
      $variables['trays'][$key] = [
        'links' => $element[$key]['tray'],
        'attributes' => new Attribute($attributes),
      ];
      if (array_key_exists('#heading', $element[$key]['tray'])) {
        $variables['trays'][$key]['label'] = $element[$key]['tray']['#heading'];
      }
    }

    // Add the tab.
    if (isset($element[$key]['tab'])) {
      $attributes = [];

      // Pass the wrapper attributes along.
      if (!empty($element[$key]['#wrapper_attributes'])) {
        $attributes = $element[$key]['#wrapper_attributes'];
      }
      $variables['tabs'][$key] = [
        'link' => $element[$key]['tab'],
        'attributes' => new Attribute($attributes),
      ];
    }

    // Add other non-tray, non-tab child elements to the remainder variable for
    // later rendering.
    foreach (Element::children($element[$key]) as $child_key) {
      if (!in_array($child_key, [
        'tray',
        'tab',
      ])) {
        $variables['remainder'][$key][$child_key] = $element[$key][$child_key];
      }
    }
  }
}