Проверьте, является ли это главной страницей в шаблоне

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

Почему это не работает и как я могу заставить это работать?

Стефан
источник

Ответы:

24

Переменная, которую вы ищете, называется is_front:

{% if is_front %}

Доступные переменные для шаблона задокументированы в верхней части файла .html.twig, однако есть также набор переменных по умолчанию, доступных для всех шаблонов (которые не описаны в каждом отдельном шаблоне). Вы можете найти их в _template_preprocess_default_variables () .

Cottser
источник
Спасибо, это сработало! Есть ли способ добавить {{elseif}} после этого оператора if?
Стефан
Да, в документации Twig есть подробности об этом: twig.sensiolabs.org/doc/tags/if.html
Коттсер
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

Если предположить, что используемый вами шаблон - 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

Вы можете получить его прямо в html.html.twig, используя root_path. Это уже выводится в строке 31 для установки класса тела:

{%, если не root_path%}

КОД

{% endif%}

slozier
источник