Compruebe si es la página principal de la plantilla.

14

Estoy tratando de mostrar contenido cuando estoy en la página principal de mi sitio web de prueba de Drupal 8, pero el contenido se muestra en cada página:

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

¿Por qué esto no funciona y cómo puedo hacer que funcione?

Stefan
fuente

Respuestas:

24

La variable que estás buscando se llama is_front:

{% if is_front %}

Las variables disponibles para una plantilla están documentadas en la parte superior del archivo .html.twig, sin embargo, también hay un conjunto de variables predeterminadas disponibles para todas las plantillas (que no están documentadas en cada plantilla). Puede encontrarlos en _template_preprocess_default_variables () .

Cottser
fuente
Gracias este funcionó! ¿hay alguna manera de agregar un {{elseif}} después de esta declaración if?
Stefan
Sí, la documentación de Twig tiene detalles sobre eso: twig.sensiolabs.org/doc/tags/if.html
Cottser
21

Tenga en cuenta que si desea proporcionar $variables['is_front']plantillas que no lo hacen, puede agregar esto a la función de preproceso correspondiente.

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

Se hace de la misma manera en template_preprocess_page para page.html.twig.

La misma respuesta aquí

Rafael Larrinaga
fuente
1
Esto fue útil para mí en template_preprocess_html, ya que "is_front" no está disponible por defecto en html.html.twig
ben.hamelin
Creo que deberías agregar también url.path.is_frontcomo contexto de caché. Ver este comentario .
Andy
4

Suponiendo que la plantilla que está utilizando es page.html.twig, la variable que está buscando es is_front; front_pagecontiene la URL de la página principal, inicializada template_preprocess_page()con el siguiente código.

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

Para otros archivos de plantilla, Drupal no proporciona ninguna variable que le indique si el usuario está visitando la página principal. Usando un código similar al utilizado template_preprocess_page(), puede establecer esa variable en la función de preproceso para la plantilla que está utilizando.

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

Reemplace HOOKcon el tipo de plantilla (por ejemplo, campo para la plantilla field.hmtl.twig).

kiamlaluno
fuente
4

Puede obtenerlo directamente en html.html.twig usando root_path. Ya se muestra en la línea 31 para establecer la clase de cuerpo:

{% si no root_path%}

CÓDIGO

{% terminara si %}

más descuidado
fuente