xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Пример добавления в меню 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
Похожие записи

Комментарии RSS

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

Там разве не DI должно быть?

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании