Drupal 8テンプレートファイルでベースパスを使用したい。次の方法を試したが、正しい結果が得られない。
{{ app.request.baseUrl }}
{{base_path}}
私が必要なのはノードへの絶対パス{{ app.request.baseUrl }}/{{ url }}
。
私が見つけた1つの解決策は、このコードをプリプロセスフックに入れて、テーマに渡すことです。
$Host = \Drupal::request()->getHost();
$response = \Drupal::httpClient()
より良い解決策を探しています。使用しているものの代わりに何を使用すればよいですか?
そして 8.2.xのページドキュメント によれば、フロントページとベースパスURLを返すために2つのグローバル変数が追加されました:
front_page:フロントページのURL。フロントページにリンクするときは、base_pathの代わりにこれを使用してください。これには、言語ドメインまたはプレフィックスが含まれます。
base_path:DrupalインストールのベースURLパス。Drupalをサブディレクトリにインストールしていない限り、通常は「/」になります。
So_front_page
_でフォントページのURLを取得し、_base_url
_でベースURLを取得できます
注
例として、{{ url('<front>') }}
を使用してフロントページのURLを取得すると、他のパスと連結したい場合に問題が発生します
_{% set base_url = url('<front>') %}
{% set url = [ base_url,'/landing-page?invitecode=' ,invite_code] | join %}
{{ url }}
_
帰る
_Array/landing-page?invitecode=
_
これは、デフォルトではテキストではなく、レンダリング可能な配列を小枝に返します
url()
を使用して、Drupalの任意のルートへのベースURLを生成できます。 <front>
ルートは、実際にはベースURLになります。
{{ url('<front>') }}
ただし、render連結する場合は、最初に次のようにします。
{{ url('<front>')|render ~ file_url('public://image.jpg') }}
例えば:
{{ url('<front>') ~ file_url('public://image.jpg') }}
# Outputs: "Array/sites/all/default/files/image.jpg"
{{ url('<front>')|render ~ file_url('public://image.jpg') }}
# Outputs: "http://example.com/sites/all/default/files/image.jpg"
Drupal 8)のパーツからパスを明示的に構築する必要はほとんどありません。次のようなものを使用します。
function FOO_preprocess_node(&$variables) {
/** @var \Drupal\node\NodeInterface $node */
$node = $variables['node'];
$variables['url'] = $node->toUrl('canonical', [
'absolute' => TRUE,
'language' => $node->language(),
])->toString();
}
page.html.twig
にはwillが機能する{{ base_path }}
変数があります。すべてのテンプレートで使用できない理由、私にはわかりません。私はそれがあるべきだと思うし、他はすべて散らかっているように見えるので、私の優先する解決策は、Drupalが必要な場所のプリプロセスページ関数で行うように正確に行うことです。
Exampleというテーマのブロックテンプレートで{{ base_path }}
を使用できるようにするには、次のコードをexample.theme
ファイルに追加します。
/**
* Implements hook_preprocess_block().
*/
function example_preprocess_block(&$variables) {
$variables['base_path'] = base_path();
}
MPDが提供する承認済みの回答に記載されているように、ノードまたは他のエンティティのURLを取得する場合、それをすべて行う方法があります。
ただし、テーマフォルダーにある画像を表示する場合など、base_pathを取得する理由があります。 {{ directory }}
は、テーマフォルダーへのパスを提供しますが、ベースパスは省略します(通常は/ですが、ハードコードされるべきではないドメインのサブディレクトリからのDrupalの適切な機能を維持するためです)。 page.html.twig
または上記のプリプロセッサを含むテンプレートでは、これはその目的で機能します。
<img src="{{ base_path ~ directory }}/images/nsf1.svg"
alt="National Science Foundation logo" height="80" width="80" />
そしてもちろん、Shawn Connの答えは、きれいなテンプレートへの欲求を抑えることができればうまくいきますが、できませんでした。
に
function hook_preprocess(&$variables) {
$variables['base_path'] = base_path();
}
&テンプレートファイルでは、次を介して呼び出すことができます
{{ base_path ~ directory }}
これまでのところ、このスレッドは適切な解決策をもたらしません。 render_val()を使用して連結できます
エンティティイメージの絶対パスを取得するための使用方法は次のとおりです。
{% set base_url = render_var(url('<front>')) %}
{% set url = base_url|trim('/', 'right')~file_url(content.field_media[0]['#media'].get('field_image').entity.uri.value) %}
まず、サイトのベースURLを取得します。次に、余分な/を削除する必要があります。次に、ベースパスと画像の相対パスを連結します。
言語パスが設定されているため、上記のすべてが失敗しました。フロントページのURLはhttps://example.com/en
のようになります。
私はこのコードを使用して自分のサイトの実際のベースURLを取得することになりました。
{% set base_url = url('<front>')|render|split('/', -1)|join('/') %}
{{ path('<front>') }}
これを正しいものとしてマークしていることは承知していますが、これは余分な作業をせずに、テンプレートファイルのtwig要素として使用できます。これをブロックで見つけました--system-branding- Classyテーマのblock.html.twigなので、次のように使用できます。
<a href="{{ path('<front>') }}" title="{{ 'Home'|t }}" rel="home">{{ site_name }}</a>