检查它是否在模板的首页


14

我试图在Drupal 8测试网站的首页上显示内容时,但内容显示在每个页面上:

{% 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 %}

为什么不起作用,我如何使它起作用?

Answers:


24

您要查找的变量称为is_front

{% if is_front %}

模板的可用变量记录在.html.twig文件的顶部,但是,所有模板还可以使用一组默认变量(并非在每个模板中都有记录)。您可以在_template_preprocess_default_variables()中找到它们。


谢谢这个工作!有没有一种方法可以在此if语句之后添加{{elseif}}?
Stefan 2014年

是的,Twig文档对此有详细说明:twig.sensiolabs.org/doc/tags/if.html
Cottser 2014年

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中对我很有用,因为默认情况下html.html.twig中“ is_front”不可用
ben.hamelin

我认为您也应该添加url.path.is_front作为缓存上下文。看到这个评论
安迪

4

假设您使用的模板是page.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中获得它。它已经在第31行输出以设置主体类:

{%,如果不是root_path%}

{% 万一 %}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.