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?

Stefan
la source

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

Cottser
la source
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

Raphael Larrinaga
la source
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).

kiamlaluno
la source
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 %}

plus lent
la source