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


14

J'essaie d'afficher du contenu lorsque je suis sur la première page de mon site Web de test 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?

Réponses:


24

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


Merci celui-ci a fonctionné! existe-t-il un moyen d'ajouter un {{elseif}} après cette instruction if?
Stefan

Oui, la documentation Twig contient des détails à ce sujet: twig.sensiolabs.org/doc/tags/if.html
Cottser

21

Notez que si vous souhaitez fournir $variables['is_front']des modèles qui ne le sont pas, vous pouvez l'ajouter à 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


1
Cela m'a été utile dans template_preprocess_html, car "is_front" n'est pas disponible par défaut dans html.html.twig
ben.hamelin le

Je pense que vous devriez également ajouter url.path.is_frontun contexte de cache. Voir ce commentaire .
Andy

4

En supposant que le modèle que vous utilisez est page.html.twig, la variable que vous recherchez est is_front; front_pagecontient l'URL de la page d'accueil, initialisée 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é à partir de template_preprocess_page(), vous pouvez définir cette variable dans la fonction de prétraitement pour le 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 HOOKpar le type de modèle (par exemple, champ pour le modèle field.hmtl.twig).


4

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

{% fin si %}

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.