Wie kann ich der Admin-Symbolleiste Elemente hinzufügen?

11

In Drupal 8 möchte ich der Admin-Symbolleiste einen Menüpunkt mit einem Untermenü mit verschiedenen Links hinzufügen.

Wie kann ich es tun?

jmzea
quelle

Antworten:

17

Sie können der Admin-Symbolleiste auf zwei Arten Elemente hinzufügen:

Als Inhalt:

In ui /admin/structure/menu/manage/admin

oder im Code:

$item = \Drupal\menu_link_content\Entity\MenuLinkContent::create([
  'link' => ['uri' => 'internal:/<front>'],
  'title' => 'Front Page',
  'menu_name' => 'admin',
]);
$item->save();

Oder in statischen Konfigurationsdateien:

system.admin:
  title: Administration
  route_name: system.admin
  weight: 9
  menu_name: admin
system.admin_content:
  title: Content
  description: 'Find and manage content.'
  route_name: system.admin_content
  parent: system.admin
  weight: -10
system.admin_structure:
  route_name: system.admin_structure
  parent: system.admin
  description: 'Administer blocks, content types, menus, etc.'
  title: Structure
  weight: -8
system.themes_page:
  route_name: system.themes_page
  title: Appearance
  description: 'Select and configure themes.'
  parent: system.admin
  weight: -6

Dies ist der Start von system.links.menu.yml , das das Admin-Menü definiert, wie wir es von D8 kennen. Sie können Ihre eigenen Einträge in mymodule.links.menu.yml hinzufügen .

Bearbeiten:

Verwenden Sie den Haken, um der oberen Reihe ein Element hinzuzufügen mymodule_toolbar(). Dies ist ein Beispiel aus dem Tour-Modul:

/**
 * Implements hook_toolbar().
 */
function tour_toolbar() {
  $items = [];
  $items['tour'] = [
    '#cache' => [
      'contexts' => [
        'user.permissions',
      ],
    ],
  ];

  if (!\Drupal::currentUser()->hasPermission('access tour')) {
    return $items;
  }

  $items['tour'] += array(
    '#type' => 'toolbar_item',
    'tab' => array(
      '#type' => 'html_tag',
      '#tag' => 'button',
      '#value' => t('Tour'),
      '#attributes' => array(
        'class' => array('toolbar-icon', 'toolbar-icon-help'),
        'aria-pressed' => 'false',
      ),
    ),
    '#wrapper_attributes' => array(
      'class' => array('tour-toolbar-tab', 'hidden'),
      'id' => 'toolbar-tab-tour',
    ),
    '#attached' => array(
      'library' => array(
        'tour/tour',
      ),
    ),
  );
 return $items;
}
4k4
quelle
1
Danke @ 4k4, aber wenn ich versuche, es über die Benutzeroberfläche hinzuzufügen, wird das Element nicht in der ersten Ebene der Option Verwalten der Symbolleiste angezeigt.
Jmzea
2
Um einen Gegenstand in die oberste Reihe zu bekommen, müssen Sie einen Haken verwenden. Ich habe der Antwort ein Beispiel gegeben.
4k4
1
Vielen Dank für Ihre Antworten. Am Ende werde ich das Modul [ Symbolleistenmenü ] ( drupal.org/project/toolbar_menu ) verwenden, das sich an meine Bedürfnisse anpasst.
Jmzea
Es lohnt sich auch, einen Blick auf das Entwicklungsmodul und dessen Implementierung zu werfen hook_toolbarund a ToolbarHandler.
Leymannx
@ 4k4: Wo fügst du den ersten Code hinzu?
Ponzio Pilato
4

Für alle, die sich fragen, wo sie Code aus der vorherigen Antwort einfügen können - Sie können ihn beispielsweise in MYMODULE.install verwenden

function MYMODULE_install(){
    $item = \Drupal\menu_link_content\Entity\MenuLinkContent::create([
      'link' => ['uri' => 'internal:/admin/link'],
      'title' => 'Link title',
      'menu_name' => 'admin',
    ]);
    $item->save();
}
Szymon Dworzecki
quelle