mcpField
D
drupal-menus

drupal-menus

github.com/edutrulDevelopment7349 installsUpdated 21w ago
Repository

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

  1. 01Define menu links in YAML
  2. 02Create task tabs and action links
  3. 03Load and filter menu trees
  4. 04Alter discovered menu links
  5. 05Implement dynamic menu link plugins

Use cases

  1. 01Add an administration menu entry
  2. 02Create settings tabs for a route
  3. 03Build a menu tree with depth limits
  4. 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-menus

After installing, type/drupal-menusin Claude Code to confirm it loaded.

Bundled filesREADME.md

Details

From the project README

Drupal 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