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


Я пытаюсь показать контент, когда нахожусь на главной странице моего тестового веб-сайта 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 %}

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

 14
Author: kiamlaluno, 2014-11-07

5 answers

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

{% if is_front %}

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

 25
Author: Cottser, 2014-11-07 14:15:41

Обратите внимание, что если вы хотите предоставить $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.

Тот же ответ здесь

 21
Author: Raphael Larrinaga, 2017-04-13 12:47:05

Предполагая, что вы используете шаблон 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
Author: kiamlaluno, 2016-06-15 10:03:01

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

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

КОД

{% конец %}

 4
Author: slozier, 2016-06-28 18:21:14

Для шаблона поля это код, который необходимо поместить в mytheme.тема:

        function mytheme_preprocess_field(&$vars, $hook) {
          $element = &$vars['element'];
          if ($element['#field_name'] == 'field_page_paragraphs') {
            $vars['is_front'] = \Drupal::service('path.matcher')->isFrontPage();
          }
        }
 0
Author: GZveri, 2020-04-26 22:41:07