web-dev-qa-db-fra.com

Vérifiez s'il s'agit de la première page du modèle

J'essaie d'afficher du contenu lorsque je suis sur la première page de mon Drupal 8, mais le contenu s'affiche sur chaque page:

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

Pourquoi cela ne fonctionne-t-il pas et comment puis-je le faire?

14
Stefan

La variable que vous recherchez s'appelle is_front:

{% if is_front %}

Les variables disponibles pour un modèle sont documentées en haut du fichier .html.twig, mais il existe également un ensemble de variables par défaut disponibles pour tous les modèles (qui ne sont pas documentés dans chaque modèle). Vous pouvez les trouver dans _ template_preprocess_default_variables () .

24
Cottser

Notez que si vous souhaitez fournir $variables['is_front'] aux modèles qui ne le sont pas, vous pouvez l'ajouter dans la fonction de prétraitement concernée.

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

Cela se fait de la même manière dans template_preprocess_page pour page.html.twig.

Même réponse ici

21
Raphael Larrinaga

En supposant que le modèle que vous utilisez est page.html.twig, la variable que vous recherchez est is_front; front_page Contient l'URL de la première page, initialisée en template_preprocess_page() avec le code suivant.

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

Pour les autres fichiers de modèle, Drupal ne fournit aucune variable vous indiquant si l'utilisateur visite la page d'accueil. En utilisant un code similaire à celui utilisé depuis template_preprocess_page(), vous pouvez définissez cette variable dans la fonction de prétraitement du modèle que vous utilisez.

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

Remplacez HOOK par le type de modèle (par exemple champ pour le modèle field.hmtl.twig).

4
kiamlaluno

Vous pouvez l'obtenir directement dans html.html.twig en utilisant root_path. Il est déjà sorti sur la ligne 31 pour définir la classe de corps:

{% sinon root_path%}

CODE

{% endif%}

4
slozier