Periksa apakah itu halaman depan dalam templat


14

Saya mencoba menampilkan konten ketika saya berada di halaman depan situs web Drupal 8 test saya, tetapi kontennya ditampilkan di setiap halaman:

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

Mengapa ini tidak berhasil dan bagaimana saya bisa membuat ini berfungsi?

Jawaban:


24

Variabel yang Anda cari disebut is_front:

{% if is_front %}

Variabel yang tersedia untuk templat didokumentasikan di bagian atas file .html.twig, namun ada juga serangkaian variabel default yang tersedia untuk semua templat (yang tidak didokumentasikan dalam setiap templat tunggal). Anda dapat menemukannya di _template_preprocess_default_variables () .


Terima kasih, ini berhasil! apakah ada cara untuk menambahkan {{elseif}} setelah pernyataan if ini?
Stefan

Ya, dokumentasi Twig memiliki perincian tentang itu: twig.sensiolabs.org/doc/tags/if.html
Cottser

21

Perhatikan bahwa jika Anda ingin menyediakan $variables['is_front']untuk templat yang tidak, Anda dapat menambahkan ini ke fungsi preproses yang bersangkutan.

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

Ini dilakukan dengan cara yang sama di template_preprocess_page untuk page.html.twig.

Jawaban yang sama di sini


1
Ini berguna bagi saya di template_preprocess_html, karena "is_front" tidak tersedia secara default di html.html.twig
ben.hamelin

Saya pikir Anda harus menambahkan url.path.is_frontsebagai konteks cache juga. Lihat komentar ini .
Andy

4

Dengan asumsi bahwa template yang Anda gunakan adalah page.html.twig, maka variabel yang Anda cari adalah is_front; front_pageberisi URL halaman depan, diinisialisasi template_preprocess_page()dengan kode berikut.

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

Untuk file templat lainnya, Drupal tidak menyediakan variabel yang memberi tahu Anda jika pengguna mengunjungi halaman depan. Menggunakan kode yang mirip dengan yang digunakan dari template_preprocess_page(), Anda dapat mengatur variabel itu dalam fungsi preprocess untuk template yang Anda gunakan.

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

Ganti HOOKdengan tipe templat (misalnya bidang untuk templat field.hmtl.twig).


4

Anda bisa mendapatkannya langsung di html.html.twig menggunakan root_path. Ini sudah keluaran pada baris 31 untuk mengatur kelas tubuh:

{% jika bukan root_path%}

KODE

{% berakhir jika %}

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.