Перевірте, чи це головна сторінка в шаблоні


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 () .


Дякую, цей працював! чи є спосіб додати {{elseif}} після цього, якщо оператор?
Стефан

Так, у документації Twig є про це деталі: 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

Якщо припустити, що шаблон, який ви використовуєте, це 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%}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.