Same name and namespace in other branches
  1. 8.9.x core/lib/Drupal/Core/Menu/menu.api.php \hook_contextual_links_alter()
  2. 9 core/lib/Drupal/Core/Menu/menu.api.php \hook_contextual_links_alter()

Alter contextual links before they are rendered.

This hook is invoked by \Drupal\Core\Menu\ContextualLinkManager::getContextualLinkPluginsByGroup(). The system-determined contextual links are passed in by reference. Additional links may be added and existing links can be altered.

Each contextual link contains the following entries:

  • title: The localized title of the link.
  • route_name: The route name of the link.
  • route_parameters: The route parameters of the link.
  • localized_options: An array of URL options.
  • (optional) weight: The weight of the link, which is used to sort the links.

Parameters

array $links: An associative array containing contextual links for the given $group, as described above. The array keys are used to build CSS class names for contextual links and must therefore be unique for each set of contextual links.

string $group: The group of contextual links being rendered.

array $route_parameters: The route parameters passed to each route_name of the contextual links. For example:

array(
  'node' => $node
    ->id(),
);

See also

\Drupal\Core\Menu\ContextualLinkManager

Related topics

1 invocation of hook_contextual_links_alter()
ContextualLinkManagerTest::testGetContextualLinksArrayByGroup in core/tests/Drupal/Tests/Core/Menu/ContextualLinkManagerTest.php
Tests the getContextualLinksArrayByGroup method.

File

core/lib/Drupal/Core/Menu/menu.api.php, line 395
Hooks and documentation related to the menu system and links.

Code

function hook_contextual_links_alter(array &$links, $group, array $route_parameters) {
  if ($group == 'menu') {

    // Dynamically use the menu name for the title of the menu_edit contextual
    // link.
    $menu = \Drupal::entityTypeManager()
      ->getStorage('menu')
      ->load($route_parameters['menu']);
    $links['menu_edit']['title'] = t('Edit menu: @label', [
      '@label' => $menu
        ->label(),
    ]);
  }
}