Überprüfen Sie, ob es sich um die Titelseite in der Vorlage handelt


14

Ich versuche, Inhalte anzuzeigen, wenn ich auf der Startseite meiner Drupal 8-Testwebsite bin, aber der Inhalt wird auf jeder Seite angezeigt:

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

Warum funktioniert das nicht und wie kann ich das zum Laufen bringen?

Antworten:


23

Die gesuchte Variable heißt is_front:

{% if is_front %}

Die verfügbaren Variablen für eine Vorlage sind oben in der Datei .html.twig dokumentiert. Es stehen jedoch auch eine Reihe von Standardvariablen für alle Vorlagen zur Verfügung (die nicht in jeder einzelnen Vorlage dokumentiert sind). Sie finden sie in _template_preprocess_default_variables () .


Danke, das hat funktioniert! Gibt es eine Möglichkeit, nach dieser if-Anweisung ein {{elseif}} hinzuzufügen?
Stefan

Ja, die Twig-Dokumentation enthält Details dazu: twig.sensiolabs.org/doc/tags/if.html
Cottser

21

Wenn Sie $variables['is_front']Vorlagen bereitstellen möchten, die dies nicht tun, können Sie dies der betreffenden Vorverarbeitungsfunktion hinzufügen.

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

Dies geschieht auf die gleiche Weise in template_preprocess_page für page.html.twig.

Gleiche Antwort hier


1
Dies war für mich in template_preprocess_html nützlich, da "is_front" in html.html.twig
ben.hamelin am

Ich denke, Sie sollten auch url.path.is_frontals Cache-Kontext hinzufügen . Siehe diesen Kommentar .
Andy

4

Unter der Annahme , dass die Vorlage , die Sie verwenden , ist page.html.twig, dann ist die Variable , die Sie suchen ist is_front; front_pageEnthält die URL der Startseite, die template_preprocess_page()mit dem folgenden Code initialisiert wurde .

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

Für andere Vorlagendateien bietet Drupal keine Variablen an, die Sie darüber informieren, ob der Benutzer die Startseite besucht. Mit einem ähnlichen Code wie dem von template_preprocess_page()können Sie diese Variable in der Vorverarbeitungsfunktion für die von Ihnen verwendete Vorlage festlegen.

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

Ersetzen Sie HOOKdurch den Vorlagentyp (z. B. Feld für die Vorlage field.hmtl.twig).


4

Sie können es direkt in html.html.twig mit root_path abrufen. Es wird bereits in Zeile 31 ausgegeben, um die Body-Klasse festzulegen:

{% falls nicht root_path%}

CODE

{% endif%}

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.