Не кликабельные пункты меню

21

На сайте Drupal 8 я хочу добавить пункты меню без ссылки, я думал, что nolink разрешен, но когда я вошел в это, я получил ошибку

Введенные вручную пути должны начинаться с /,? или #.

Есть ли способ добавить пункты меню, на которые нельзя нажать, без добавления «#», поскольку «#» добавляет атрибут [data-drupal-link-system-path = ""] и [class = "is-active"]

Мохамед Усама Гбриль
источник

Ответы:

45

Вы должны использовать route:<nolink>для достижения этой цели. Затем он будет проверяться и отображаться без ссылки.

Kevin
источник
Большое спасибо, я попробовал его, и он работал нормально, но все еще добавляя атрибуты [data-drupal-link-system-path = "<front>"] и [class = "is-active"]
Мохамед Усама Гбриль
1
Это отдельная проблема от того, чего вы пытаетесь достичь, и это основная ошибка или проблема с вашей темой, но route:<nolink>это определенно ответ. Это даже работает с Pathauto.
Кевин
Об ошибке «is-active» класса сообщалось здесь: drupal.org/project/drupal/issues/2838351
FiNeX
Это сработало для меня. Спасибо за такое знающее решение.
Ученик
2

Чтобы создать пункт меню без ссылки в пользовательском модуле, добавьте в [module_name] .links.menu.yml:

url: 'internal:##'

Вам нужно добавить второй символ # (или любую другую букву или слово url: 'internal:#nolink'), чтобы атрибут href не отображался пустым, что приведет к перезагрузке страницы, если пользователь щелкнет ссылку.

Guest312312
источник
Это также хорошее решение. Для меня лучше, чем удалить ссылку, которая удаляет тег <a>, а затем этот пункт меню теряет соответствующие стили CSS.
Хуанми
0

Для Drupal 8 вы можете создать ссылку программно, используя Link :: fromTextAndUrl, а не так:

$my_link = Link::fromTextAndUrl(t('This is my link text'), Url::fromUri('route:<nolink>'));

При желании вы можете преобразовать его в массив, используя: $my_link = $my_link->toRenderable();

Хави Гарсия
источник