Controlla se è la prima pagina del modello


14

Sto cercando di mostrare il contenuto quando sono sulla prima pagina del mio sito Web di test Drupal 8, ma il contenuto viene visualizzato su ogni pagina:

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

Perché non funziona e come posso farlo funzionare?

Risposte:


24

La variabile che stai cercando si chiama is_front:

{% if is_front %}

Le variabili disponibili per un modello sono documentate nella parte superiore del file .html.twig, tuttavia è disponibile anche una serie di variabili predefinite per tutti i modelli (che non sono documentati in ogni singolo modello). Li puoi trovare in _template_preprocess_default_variables () .


Grazie, ha funzionato! c'è un modo per aggiungere un {{elseif}} dopo questa istruzione if?
Stefan,

Sì, la documentazione di Twig contiene dettagli al riguardo: twig.sensiolabs.org/doc/tags/if.html
Cottser

21

Si noti che se si desidera fornire $variables['is_front']ai modelli che non lo fanno, è possibile aggiungere questo nella funzione di preelaborazione in questione.

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

È fatto allo stesso modo in template_preprocess_page perpage.html.twig .

Stessa risposta qui


1
Questo è stato utile per me in template_preprocess_html, poiché "is_front" non è disponibile per impostazione predefinita in html.html.twig
ben.hamelin

Penso che dovresti aggiungere anche url.path.is_frontcome contesto cache. Vedere questo commento .
Andy,

4

Supponendo che il modello che stai usando sia page.html.twig, allora la variabile che stai cercando è is_front; front_pagecontiene l'URL della prima pagina, inizializzato template_preprocess_page()con il seguente codice.

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

Per altri file modello, Drupal non fornisce alcuna variabile che ti dice se l'utente sta visitando la prima pagina. Utilizzando un codice simile a quello utilizzato da template_preprocess_page(), è possibile impostare quella variabile nella funzione di preelaborazione per il modello che si sta utilizzando.

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

Sostituire HOOKcon il tipo di modello (ad es. Campo per il modello field.hmtl.twig).


4

Puoi ottenerlo direttamente in html.html.twig usando root_path. È già in uscita sulla riga 31 per impostare la classe del corpo:

{% if not root_path%}

CODICE

{% finisci se %}

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.