Как получить URL-адрес узла в шаблоне Twig?

22

Я пытаюсь получить URL-адрес узла в шаблоне Twig. {{ content.node_link }}возвращает полную ссылку, но мне нужен только URL.

Как получить URL-адрес узла?

inalto
источник
4
Если вы посмотрите в шаблоне узла, вы увидите, что urlэто доступная переменная. Таким образом, простая печать, {{ url }}например, отобразит необработанный URL, /node/[nid]т.е. /node/30без какой-либо разметки. Это то, что вы хотите сделать?
Дэнни Энгландер

Ответы:

30

В соответствии с функциями - в шаблонах Twig вы можете использовать просто

 {{ path('entity.node.canonical', {'node': node.id}) }}
Юсеф
источник
3
Это решение работает, и довольно круто. Но использование {{url}} в node--основанном шаблоне веточки даст вам тот же результат.
Эрик
11

В node.html.twig вы можете напрямую использовать {{ url }}

<a href="{{ url }}">read more</a>

Для получения дополнительной информации прочитайте комментарий в основном шаблоне /core/modules/node/templates/node.html.twig:

{#
/**
 * @file
 * Default theme implementation to display a node.
 *
 * Available variables:
 * - node: The node entity with limited access to object properties and methods.
 * ...
 * - url: Direct URL of the current node.
 * ...
#}
...

<article{{ attributes }}>

  {{ title_prefix }}
  {% if not page %}
    <h2{{ title_attributes }}>
      <a href="{{ url }}" rel="bookmark">{{ label }}</a>
    </h2>
  {% endif %}
  {{ title_suffix }}
toto21
источник
Вы должны объяснить свой ответ больше, чем "просто говоря". Объяснение, например, то, что @Danny Englander написал в комментарии к вопросу, помогает спрашивающему и другим узнать больше о том, как вы придумали свой ответ и как они могут помочь себе в будущем.
Мрадклифф
Это самый простой метод, использующий встроенную переменную в шаблоне ветки узла.
Эрик
Это должен быть принятый ответ
Капсула
7

Я нашел это решение, которое работает, но довольно запутанно.

{{ path('entity.node.canonical', {'node': content['#node'].id()  }) }}
inalto
источник
4
Вы можете использовать node.idвместоcontent['#node'].id()
4k4
2
Я работаю в представлении с шаблоном набора отображения, и «узел» не является одним из доступных ключей. {{dump (_context | keys)}} дает только эти ключи: 'content', 'theme_hook_original', 'attribute', 'title_attributes', 'content_attributes', 'title_prefix', 'title_suffix', 'db_is_active', 'is_admin' , 'logged_in', 'user', 'directory', 'settings', 'layout', '#cache', 'theme_hook_suggestions'
до
Отличное решение для отображения набора шаблонов. @ 4k4 content['#node'].id()правильно для контекста DS.
главный шеф