About drupal-menus
drupal-menus is a Drupal development skill for defining and managing menu links. It covers YAML declarations, menu trees, link alterations, and dynamic menu link plugins.
Key features
- 01Define menu links in YAML
- 02Create task tabs and action links
- 03Load and filter menu trees
- 04Alter discovered menu links
- 05Implement dynamic menu link plugins
Use cases
- 01Add an administration menu entry
- 02Create settings tabs for a route
- 03Build a menu tree with depth limits
- 04Set menu link titles dynamically
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ edutrul/ drupal-ai --skill drupal-menusAfter installing, type/drupal-menusin Claude Code to confirm it loaded.
Bundled filesREADME.md
Details
From the project READMEDrupal Menus
Menu Links (*.links.menu.yml)
# my_module.links.menu.yml
my_module.admin:
title: 'My Module'
description: 'Configure My Module.'
route_name: my_module.admin
parent: system.admin_config
weight: 10
my_module.admin.settings:
title: 'Settings'
route_name: my_module.admin.settings
parent: my_module.admin
weight: 0
Task Links / Tabs (*.links.task.yml)
# my_module.links.task.yml
my_module.settings_tab:
title: 'Settings'
route_name: my_module.admin.settings
base_route: my_module.admin
my_module.advanced_tab:
title: 'Advanced'
route_name: my_module.admin.advanced
base_route: my_module.admin
weight: 10
Action Links (*.links.action.yml)
# my_module.links.action.yml
my_module.add_item:
title: 'Add Item'
route_name: my_module.add
appears_on:
- my_module.list
Programmatic Menu Tree
use Drupal\Core\Menu\MenuTreeParameters;
$menu_tree = \Drupal::menuTree();
$parameters = new MenuTreeParameters();
$parameters->setMaxDepth(2)->onlyEnabledLinks();
$tree = $menu_tree->load('main', $parameters);
$manipulators = [
['callable' => 'menu.default_tree_manipulators:checkAccess'],
['callable' => 'menu.default_tree_manipulators:generateIndexAndSort'],
];
$tree = $menu_tree->transform($tree, $manipulators);
$build = $menu_tree->build($tree);
Altering Menu Links
#[Hook('menu_links_discovered_alter')]
public function menuLinksDiscoveredAlter(array &$links): void {
if (isset($links['my_module.some_link'])) {
$links['my_module.some_link']['title'] = new TranslatableMarkup('New Title');
}
}
Dynamic Menu Links (MenuLinkDefault plugin)
// src/Plugin/Menu/MyDynamicMenuLink.php
use Drupal\Core\Menu\MenuLinkDefault;
final class MyDynamicMenuLink extends MenuLinkDefault {
public function getTitle(): string {
return 'Dynamic Title from ' . $this->getRouteName();
}
}
Comments
Markdown supported