如何将项目添加到管理工具栏?


11

在Drupal 8中,我想通过一个带有不同链接的子菜单将菜单项添加到Admin Toolbar。

我该怎么做?

Answers:


18

您可以通过两种方式将项目添加到管理工具栏:

作为内容:

在ui中 /admin/structure/menu/manage/admin

或在代码中:

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

或在静态配置文件中:

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

这是system.links.menu.yml的开始,它定义了D8中的管理菜单。您可以在mymodule.links.menu.yml中添加自己的条目。

编辑:

要将项目添加到第一行,请使用钩子mymodule_toolbar()。这是来自tour模块的示例:

/**
 * 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;
}

1
感谢@ 4k4,但是当我尝试通过UI添加它时,该项目不会出现在工具栏的“管理”选项的第一级中。
jmzea

2
要获得第一行中的项目,您必须使用钩子。我在答案中举了一个例子。
k4

1
谢谢您的回答,最后我将使用适合我需要的模块[工具栏菜单](drupal.org/project/toolbar_menu)。
jmzea

还值得一看的devel模块及其实现和hook_toolbarToolbarHandler
leymannx

@ 4k4:您在哪里添加第一个代码?
Ponzio Pilato

4

对于所有想知道他们可以将先前答案的代码放在哪里的人–例如,您可以在MYMODULE.install中使用它

function MYMODULE_install(){
    $item = \Drupal\menu_link_content\Entity\MenuLinkContent::create([
      'link' => ['uri' => 'internal:/admin/link'],
      'title' => 'Link title',
      'menu_name' => 'admin',
    ]);
    $item->save();
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.