web-dev-qa-db-ja.com

テンプレートでノードエイリアスを取得する

about-usを作成し、基本ページコンテンツタイプとパスエイリアスを_\about-us_(nid = 2)にエイリアス化しました。パスエイリアスを取得したいテンプレートファイル

_<li><a href="{{  ??????? }}">{{ 'About Us'|t }}</a></li>
_

Drupal 7 url("node/2")で取得しましたが、Drupal 8で同等のものは何ですか?使用するスニペットテンプレートファイルのnid 2のパスエイリアスを取得するには?

3
Yusef

概要生成したい場合相対URLを使用してpathを生成したい場合絶対URLuse urlしたがって、この質問の解決策は相対URLに対するものです

 path('entity.node.canonical', {'node': node.nid}) 

絶対URL

 url('entity.node.canonical', {'node': node.nid}) 

また、pathurl、およびlink関数についての詳細を提供し、他の人がこの質問を受け取ったのを助けました(1年後に私が受け取ったので)

url($ name、$ parameters、$ options)

ルート名とパラメーターを指定して絶対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>

path($ name、$ parameters、$ options)

ルート名とパラメータを指定して[relative] 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\Bridge\Twig\Extension\RoutingExtensionにあるものとほぼ並行して定義されます。

link($ text、$ url、$ attributes)

このヘルパー関数は、最初のパラメーターとしてテキストを受け入れ、2番目のパラメーターとしてURLを受け入れます。

例:

{{ link(item.title, item.url, { 'class':['foo', 'bar', 'baz']} ) }}

file_url($ uri)

このヘルパー関数は、ルートからの相対パスを受け入れ、ファイルへの相対URIパスを作成します。

{{ file_url(node.field_example_image.entity.uri.value) }}
6
Yusef

テンプレートファイルでpath('entity.node.canonical', {'node': dd.nid})を使用できます。

テンプレートファイルのマークアップは次のようになります。

<li><a href="{{path('entity.node.canonical', {'node': dd.nid})}}">{{ 'About Us'|t }}</a></li>

私は試していませんが、うまくいくはずです。

14
Nitesh Sethia

テンプレートにノードIDを貼り付けるのは好きではありません(ユーザーにノードを削除して新しいノードIDでページを再作成するように要求するだけです)。

私はこれを実行しましたが、問題ないようです:

<a href="{{ path('<front>') ~ 'some/path/here' }}">My Link</a>

デフォルトではによって返されるパスは/になるので、追加するテキストの先頭にスラッシュを付けたくないことに注意してください。

フロントパスをベースパスとして使用するのが悪い場合は、私より経験豊富な人がチャイムを打つことができるかもしれません。

編集:明らかにこのアプローチにも問題があることを知っています(ユーザーがページのエイリアスを変更し、テンプレートのリンクを壊した場合はどうなりますか?)。ただし、ユーザーはノードIDよりもエイリアスを簡単に制御できます。ノードを削除すると、単なる人間が同じIDで新しいノードを再び作成することはできません。エイリアスをめちゃくちゃにして、通常の(コンテンツエディター)ユーザーは、開発者に電話をかけなくても、エイリアスを元に戻すことができます。

0
Daniel Scott