Проверьте, является ли это главной страницей в шаблоне
Я пытаюсь показать контент, когда нахожусь на главной странице моего тестового веб-сайта 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 %}
Почему это не работает и как я могу заставить это работать?
5 answers
Переменная, которую вы ищете, называется is_front
:
{% if is_front %}
Доступные переменные для шаблона задокументированы в верхней части файла .html.twig, однако для всех шаблонов также доступен набор переменных по умолчанию (которые не задокументированы в каждом отдельном шаблоне). Вы можете найти их в _template_preprocess_default_вариабли().
Обратите внимание, что если вы хотите предоставить $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
.
Тот же ответ здесь
Предполагая, что вы используете шаблон 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).
Вы можете получить его непосредственно в html.html.twig, используя root_path. Он уже выведен в строке 31, чтобы задать класс тела:
{% если не root_path, то %}
КОД
{% конец %}
Для шаблона поля это код, который необходимо поместить в 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();
}
}