Sprawdź, czy jest to pierwsza strona w szablonie

14

Próbuję wyświetlać zawartość, gdy jestem na pierwszej stronie testowej witryny Drupal 8, ale treść jest wyświetlana na każdej stronie:

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

Dlaczego to nie działa i jak mogę to zrobić?

Stefan
źródło

Odpowiedzi:

24

Zmienna, której szukasz, nazywa się is_front:

{% if is_front %}

Dostępne zmienne dla szablonu są udokumentowane u góry pliku .html.twig, jednak istnieje również zestaw domyślnych zmiennych dostępnych dla wszystkich szablonów (które nie są udokumentowane w każdym szablonie). Można je znaleźć w _template_preprocess_default_variables () .

Cottser
źródło
Dzięki, ten zadziałał! czy istnieje sposób na dodanie {{elseif}} po tym instrukcji if?
Stefan
Tak, dokumentacja Twig zawiera szczegółowe informacje na ten temat: twig.sensiolabs.org/doc/tags/if.html
Cottser
21

Pamiętaj, że jeśli chcesz udostępnić $variables['is_front']szablony, które tego nie robią, możesz dodać to do odpowiedniej funkcji przetwarzania wstępnego.

function themename_preprocess_menu(&$variables) {
  try {
    $variables['is_front'] = \Drupal::service('path.matcher')->isFrontPage();
  }
  catch (Exception $e) {
    $variables['is_front'] = FALSE;
  }
}

Odbywa się to w ten sam sposób w szablonie_preprocess_page dla page.html.twig.

Ta sama odpowiedź tutaj

Raphael Larrinaga
źródło
1
Przydało mi się to w template_preprocess_html, ponieważ „is_front” nie jest domyślnie dostępny w html.html.twig
ben.hamelin
Myślę, że powinieneś również dodać url.path.is_frontjako kontekst pamięci podręcznej. Zobacz ten komentarz .
Andy,
4

Zakładając, że używasz szablonu page.html.twig, zmienna, której szukasz, to is_front; front_pagezawiera adres URL strony głównej, zainicjowany template_preprocess_page()za pomocą następującego kodu.

$variables['front_page'] = \Drupal::url('<front>');

W przypadku innych plików szablonów Drupal nie udostępnia żadnych zmiennych informujących, czy użytkownik odwiedza pierwszą stronę. Używając kodu podobnego do używanego z template_preprocess_page(), możesz ustawić tę zmienną w funkcji wstępnego przetwarzania dla używanego szablonu.

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

Zastąp HOOKtypem szablonu (np. Pole dla szablonu field.hmtl.twig).

kiamlaluno
źródło
4

Możesz pobrać go bezpośrednio w pliku html.html.twig, używając ścieżki root_path. Jest już wyprowadzany w linii 31, aby ustawić klasę nadwozia:

{% jeśli nie root_path%}

KOD

{% endif%}

drzemka
źródło