Verifique se é a primeira página do modelo

14

Estou tentando mostrar conteúdo quando estou na primeira página do meu site de teste do Drupal 8, mas o conteúdo é exibido em todas as páginas:

{% 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 que isso não funciona e como posso fazer isso funcionar?

Stefan
fonte

Respostas:

24

A variável que você está procurando é chamada is_front:

{% if is_front %}

As variáveis ​​disponíveis para um modelo estão documentadas na parte superior do arquivo .html.twig, no entanto, também há um conjunto de variáveis ​​padrão disponíveis para todos os modelos (que não estão documentados em todos os modelos). Você pode encontrá-los em _template_preprocess_default_variables () .

Cottser
fonte
Graças a este funcionou! existe uma maneira de adicionar uma instrução {{elseif}} após esta if?
Stefan
Sim, a documentação do Twig tem detalhes sobre isso: twig.sensiolabs.org/doc/tags/if.html
Cottser 7/11/14
21

Observe que, se você deseja fornecer $variables['is_front']modelos que não fornecem , é possível adicioná-lo à função de pré-processo em questão.

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

É feito da mesma maneira em template_preprocess_page for page.html.twig.

Mesma resposta aqui

Raphael Larrinaga
fonte
1
Este foi útil para mim em template_preprocess_html, como "is_front" não está disponível por padrão no html.html.twig
ben.hamelin
Eu acho que você também deve adicionar url.path.is_frontcomo contexto de cache. Veja este comentário .
Andy Andy
4

Supondo que o modelo que você está usando seja page.html.twig, a variável que você está procurando é is_front; front_pagecontém o URL da primeira página, inicializado template_preprocess_page()com o seguinte código.

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

Para outros arquivos de modelo, o Drupal não fornece nenhuma variável informando se o usuário está visitando a primeira página. Usando um código semelhante ao usado template_preprocess_page(), você pode definir essa variável na função de pré-processo para o modelo que está usando.

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

Substitua HOOKpelo tipo de modelo (por exemplo, campo para o modelo field.hmtl.twig).

kiamlaluno
fonte
4

Você pode obtê-lo diretamente em html.html.twig usando root_path. Já está na linha 31 para definir a classe do corpo:

{% se não for root_path%}

CÓDIGO

{% fim se %}

slozier
fonte