Получить псевдоним узла в шаблоне
Я создаю о нас с базовым типом содержимого страницы и псевдонимом пути, присвоив ему псевдоним \about-us
(nid=2), Теперь в файле шаблона я хочу получить псевдоним пути
<li><a href="{{ ??????? }}">{{ 'About Us'|t }}</a></li>
В Drupal 7 я получил его с помощью url("node/2")
, но что эквивалентно в Drupal 8?
какой фрагмент кода я должен использовать, чтобы получить псевдоним пути nid 2 в файле шаблона?
4 answers
Вы можете использовать path('entity.node.canonical', {'node': dd.nid})
в файле шаблона.
Разметка в файле шаблона будет выглядеть следующим образом.
<li><a href="{{path('entity.node.canonical', {'node': dd.nid})}}">{{ 'About Us'|t }}</a></li>
Я не пробовал, но это должно сработать.
В Резюме
если вы хотите создать относительный URL-адрес используйте path
и если вы хотите создать абсолютный URL-адрес используйте url
таким образом, решение для этого вопроса является
для относительных URL-адрес
path('entity.node.canonical', {'node': node.nid})
И для абсолютного URL-адреса
url('entity.node.canonical', {'node': node.nid})
Кроме того, я предоставил некоторые подробности о path
, url
и link
функции, помогающие другим ребятам получить этот вопрос (как я получил свой через 1 год)
URL-адрес ($имя, $параметры, $параметры)
Создайте абсолютный URL-адрес с указанием имени маршрута и параметров:
<a href="{{ url('view.frontpage.page_1') }}">{{ 'View all content'|t }}</a>
Создайте абсолютный URL-адрес для текущего URL-адреса:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
Создайте абсолютный URL-адрес главной страницы:
<a href="{{ url('<front>') }}">{{ 'Home'|t }}</a>
Путь ($имя, $параметры, $параметры)
Генерирует [относительный] URL-адрес с указанием имени маршрута и параметров.
{# Link to frontpage view. #}
<a href="{{ path('view.frontpage.page_1') }}">{{ 'View all content'|t }}</a>
{# Link to user entity/profile page. #}
<a href="{{ path('entity.user.canonical', {'user': user.id}) }}">{{ 'View user profile'|t }}</a>
{# Link to node page. #}
<a href="{{ path('entity.node.canonical', {'node': node.id}) }}">{{ 'View node page'|t }}</a>
URL-адрес и функция пути определены почти параллельно найденным в \Symfony\Мост\Ветка\Расширение\Расширение маршрута.
Ссылка ($текст, $url, $атрибуты)
Эта вспомогательная функция принимает в качестве первого параметра текст, а в качестве второго параметра URL
Примеры:
{{ link(item.title, item.url, { 'class':['foo', 'bar', 'baz']} ) }}
Адрес_файла($uri)
Эта вспомогательная функция принимает относительный путь от корневого каталога и создает относительный путь URI к файлу.
{{ file_url(node.field_example_image.entity.uri.value) }}
Мне не нравится вставлять идентификаторы узлов в шаблоны (это просто просит пользователя удалить узел и в конечном итоге воссоздать страницу с новым идентификатором узла).
Я сделал это, и, кажется, все в порядке:
<a href="{{ path('<front>') ~ 'some/path/here' }}">My Link</a>
Обратите внимание, что по умолчанию путь, возвращаемый /, будет /, поэтому вы не хотите, чтобы в добавляемом тексте была косая черта.
Кто-то более опытный, чем я, может вмешаться, если использовать фронт в качестве базового пути - плохая идея.
РЕДАКТИРОВАТЬ: Очевидно, я осознавая, что у этого подхода тоже есть проблемы (что, если какой-то пользователь изменит псевдоним страницы и разорвет ссылки в шаблоне?). Однако пользователям гораздо проще управлять псевдонимами, чем идентификаторами узлов. удалите узел, и простой смертный не сможет снова создать новый узел с тем же идентификатором. Испортите псевдоним, и обычный пользователь (редактор контента) может снова исправить его, не звоня разработчику.
Вам придется сделать это таким образом:
$path_alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/2');
Создайте эту переменную в файле шаблона и используйте эту переменную псевдонима пути везде, где вам нужен псевдоним узла.
Источник - https://www.drupal.org/node/1853148