Drupal → Программно добавить в меню динамическую ссылку

11.01.2020

Пример добавления в меню main ссылки с динамическим заголовком и адресом. В ней для залогинённых пользователей будем выводить имя пользователя с ссылкой на профиль, а для анонимов ссылку на страницу регистрации.

// src/Plugin/Menu/MyDynamicMenuLink.php

class MyDynamicMenuLink extends MenuLinkDefault {

  /**
   * {@inheritDoc}
   */
  public function getTitle() {
    $current_user = \Drupal::currentUser();
    return $current_user->isAuthenticated() ? $current_user->getAccountName() : t('Registration');
  }

  /**
   * {@inheritDoc}
   */
  public function getRouteName() {
    $current_user = \Drupal::currentUser();
    return $current_user->isAuthenticated() ? 'user.page' : 'user.register';
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheContexts() {
    return ['user.roles:authenticated'];
  }

}
# modulename.links.menu.yml

my_dynamic_link:
  class: \Drupal\modulename\Plugin\Menu\MyDynamicMenuLink
  menu_name: main

В классе MyDynamicMenuLink можно переопределять и любые другие параметры, доступные в файле *.links.menu.yml, например название меню (getMenuName()), опции (getOptions()) и т.д.

Написанное актуально для
Drupal 8
Похожие записи

Комментарии

Гость
12.01.2020, 11:35

вызов статикой сервисов - плохой подход

Статья про динамические ссылки, а не про DI

Гость
29.04.2020, 23:51

Можно как то вы меню второго уровня добавить описание ссылки способом добавления поля или вывести "заголовок" - описание которое появляется при наведении на ссылку?
Очень помогли бы.

Добавить комментарий