function UserHooks::toolbar

Implements hook_toolbar().

Attributes

#[Hook('toolbar')]

File

core/modules/user/src/Hook/UserHooks.php, line 361

Class

UserHooks
Hook implementations for user.

Namespace

Drupal\user\Hook

Code

public function toolbar() : array {
  $user = \Drupal::currentUser();
  $items['user'] = [
    '#type' => 'toolbar_item',
    'tab' => [
      '#type' => 'link',
      '#title' => $user->getDisplayName(),
      '#url' => Url::fromRoute('user.page'),
      '#attributes' => [
        'title' => $this->t('My account'),
        'class' => [
          'toolbar-icon',
          'toolbar-icon-user',
        ],
      ],
      '#cache' => [
        // Vary cache for anonymous and authenticated users.
'contexts' => [
          'user.roles:anonymous',
        ],
      ],
    ],
    'tray' => [
      '#heading' => $this->t('User account actions'),
    ],
    '#weight' => 100,
    '#attached' => [
      'library' => [
        'user/drupal.user.icons',
      ],
    ],
  ];
  if ($user->isAnonymous()) {
    $links = [
      'login' => [
        'title' => $this->t('Log in'),
        'url' => Url::fromRoute('user.page'),
      ],
    ];
    $items['user']['tray']['user_links'] = [
      '#theme' => 'links__toolbar_user',
      '#links' => $links,
      '#attributes' => [
        'class' => [
          'toolbar-menu',
        ],
      ],
    ];
  }
  else {
    $items['user']['tab']['#title'] = [
      '#lazy_builder' => [
        'user.toolbar_link_builder:renderDisplayName',
        [],
      ],
      '#create_placeholder' => TRUE,
      '#lazy_builder_preview' => [
        // Add a line of whitespace to the placeholder to ensure the icon is
        // positioned in the same place it will be when the lazy loaded content
        // appears.
'#markup' => ' ',
      ],
    ];
    $items['user']['tray']['user_links'] = [
      '#lazy_builder' => [
        'user.toolbar_link_builder:renderToolbarLinks',
        [],
      ],
      '#create_placeholder' => TRUE,
      '#lazy_builder_preview' => [
        '#markup' => '<a href="#" class="toolbar-tray-lazy-placeholder-link">&nbsp;</a>',
      ],
    ];
  }
  return $items;
}

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