テンプレートのフロントページかどうかを確認します


14

Drupal 8テストWebサイトのフロントページにいるときにコンテンツを表示しようとしていますが、コンテンツはすべてのページに表示されます。

{% if front_page %}
  <header role="banner">
    {% if logo %}
      <a href="{{ front_page }}" title="{{ 'Home'|t }}" rel="home">
        <img src="{{ logo }}" alt="{{ 'Home'|t }}"/>
      </a>
    {% endif %}
    <h1 style="color:black">TESTTESTTESTESTAET</h1>
<h1>test</h1

    {{ page.header }}
  </header>
{% endif %}

なぜこれが機能しないのですか?どうすればこの機能を作成できますか?

回答:


23

探している変数の名前はis_front次のとおりです。

{% if is_front %}

テンプレートで使用可能な変数は.html.twigファイルの上部に記載されていますが、すべてのテンプレートで使用可能なデフォルト変数のセットもあります(すべてのテンプレートに記載されているわけではありません)。それらは_template_preprocess_default_variables()で見つけることができます。


これが働いてくれてありがとう!このifステートメントの後に{{elseif}}を追加する方法はありますか?
ステファン

A:はい、小枝のドキュメントは、その上の細部ありtwig.sensiolabs.org/doc/tags/if.html
Cottser

21

提供$variables['is_front']しないテンプレートに提供したい場合は、関係する前処理関数にこれを追加できることに注意してください。

function themename_preprocess_menu(&$variables) {
  try {
    $variables['is_front'] = \Drupal::service('path.matcher')->isFrontPage();
  }
  catch (Exception $e) {
    $variables['is_front'] = FALSE;
  }
}

これは、同じ方法で行われますtemplate_preprocess_pageためpage.html.twig

ここで同じ答え


1
これは、template_preprocess_htmlで役に立ちました。「is_front」はhtml.html.twig
ben.hamelinで

url.path.is_frontキャッシュコンテキストとしても追加する必要があると思います。このコメントを参照してください。
アンディ

4

使用しているテンプレートがpag​​e.html.twigであると仮定すると、探している変数はis_front;です。次のコードfront_pageで初期化されたフロントページのURLが含まれていますtemplate_preprocess_page()

$variables['front_page'] = \Drupal::url('<front>');

他のテンプレートファイルの場合、Drupalは、ユーザーがフロントページにアクセスしているかどうかを示す変数を提供しません。から使用したものと同様のコードを使用してtemplate_preprocess_page()、使用しているテンプレートの前処理関数でその変数を設定できます。

function mymodule_preprocess_HOOK(&$variables) {
  // An exception might be thrown.
  try {
    $variables['is_front'] = \Drupal::service('path.matcher')->isFrontPage();
  }
  catch (Exception $e) {
    // If the database is not yet available, set the default value.
    $variables['is_front'] = FALSE;
  }  
}

HOOKテンプレートタイプに置き換えます(field.hmtl.twigテンプレートのフィールドなど)。


4

root_pathを使用してhtml.html.twigで直接取得できます。bodyクラスを設定するために、すでに31行目に出力されています。

{root_pathではない場合%%}

コード

{%endif%}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.