Jak uzyskać adres URL węzła w szablonie Twig?

22

Próbuję uzyskać adres URL węzła w szablonie Twig. {{ content.node_link }}zwraca pełny link, ale potrzebuję tylko adresu URL.

Jak pobrać adres URL węzła?

inalto
źródło
4
Jeśli spojrzysz na szablon węzła, zobaczysz, że urljest to dostępna zmienna. Tak więc {{ url }}na przykład zwykłe drukowanie spowoduje wyświetlenie surowego adresu URL, /node/[nid]tzn. /node/30Bez żadnego znacznika zawijania. Czy to właśnie chcesz zrobić?
Danny Englander

Odpowiedzi:

30

Zgodnie z funkcjami - w szablonach gałązek można z łatwością korzystać

 {{ path('entity.node.canonical', {'node': node.id}) }}
Yusef
źródło
3
To rozwiązanie działa i jest całkiem fajne. Ale użycie {{url}} w node--opartym na szablonie gałązki da ci ten sam rezultat.
Eric Steinborn,
11

W pliku node.html.twig możesz użyć bezpośrednio {{ url }}

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

Aby uzyskać więcej informacji, przeczytaj komentarz w podstawowym szablonie /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
źródło
Powinieneś wyjaśnić swoją odpowiedź bardziej niż „po prostu”. Wyjaśnienie, takie jak to, co napisał @Danny Englander w komentarzu do pytania, pomaga pytającemu i innym osobom dowiedzieć się więcej o tym , jak wymyśliłeś swoją odpowiedź i jak mogą sobie pomóc w przyszłości.
mradcliffe
Jest to najłatwiejsza metoda, wykorzystująca wbudowaną zmienną w szablonie gałązki węzła.
Eric Steinborn,
To powinna być zaakceptowana odpowiedź
Capsule
7

Znalazłem to rozwiązanie, które działa, ale jest dość skomplikowane.

{{ path('entity.node.canonical', {'node': content['#node'].id()  }) }}
inalto
źródło
4
Możesz użyć node.idzamiastcontent['#node'].id()
4k4
2
Pracuję w widoku z szablonem zestawu wyświetlania, a „węzeł” nie jest jednym z dostępnych kluczy. {{dump (_context | keys)}} daje tylko te klucze: „content”, „theme_hook_original”, „atrybuty”, „title_attributes”, „content_attributes”, „title_prefix”, „title_suffix”, „db_is_active”, „is_admin” , „logged_in”, „user”, „directory”, „settings”, „layout”, „#cache”, „theme_hook_suggestions”
inalto
Świetne rozwiązanie dla szablonów zestawu wyświetlacza. @ 4k4 content['#node'].id()jest poprawny dla kontekstu DS.
masterchief