Пример добавления в меню 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
Комментарии
вызов статикой сервисов - плохой подход
Там разве не DI должно быть?
Статья про динамические ссылки, а не про DI
Можно как то вы меню второго уровня добавить описание ссылки способом добавления поля или вывести "заголовок" - описание которое появляется при наведении на ссылку?
Очень помогли бы.
Добавить комментарий