ตรวจสอบว่าเป็นหน้าแรกของเทมเพลตหรือไม่


14

ฉันพยายามแสดงเนื้อหาเมื่อฉันอยู่ที่หน้าแรกของเว็บไซต์ทดสอบ Drupal 8 ของฉัน แต่เนื้อหาจะแสดงในทุกหน้า:

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

เหตุใดจึงไม่ทำงานและฉันจะทำให้งานนี้ได้อย่างไร

คำตอบ:


24

ตัวแปรที่คุณกำลังค้นหาเรียกว่าis_front:

{% if is_front %}

ตัวแปรที่มีสำหรับเทมเพลตจะได้รับการบันทึกไว้ที่ด้านบนของไฟล์. html.twig อย่างไรก็ตามยังมีชุดของตัวแปรเริ่มต้นที่มีให้สำหรับเทมเพลตทั้งหมด (ซึ่งไม่มีการบันทึกไว้ในทุกเทมเพลตเดียว) คุณสามารถพบพวกเขาใน_template_preprocess_default_variables ()


ขอบคุณสิ่งนี้ได้ผล! มีวิธีการเพิ่ม {{elseif}} หลังจากนี้ถ้าคำสั่งหรือไม่
สเตฟาน

ใช่เอกสารทวิกมีรายละเอียดดังนี้: twig.sensiolabs.org/doc/tags/if.html
Cottser

21

โปรดทราบว่าหากคุณต้องการให้$variables['is_front']กับเทมเพลตที่ไม่มีคุณสามารถเพิ่มสิ่งนี้ลงในฟังก์ชั่น preprocess ที่เกี่ยวข้อง

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

มันจะทำวิธีเดียวกันในtemplate_preprocess_pagepage.html.twigสำหรับ

คำตอบเดียวกันที่นี่


1
สิ่งนี้มีประโยชน์สำหรับฉันใน template_preprocess_html เนื่องจาก "is_front" ไม่สามารถใช้งานได้ตามค่าเริ่มต้นใน html.html.twig
ben.hamelin

ฉันคิดว่าคุณควรเพิ่มurl.path.is_frontเป็นบริบทแคชเช่นกัน ดูความคิดเห็นนี้
Andy

4

สมมติว่าแม่แบบที่คุณใช้อยู่ page.html.twig แล้วตัวแปรที่คุณกำลังมองหาคือis_front; front_pageมี URL ของหน้าแรกเริ่มต้นtemplate_preprocess_page()ด้วยรหัสต่อไปนี้

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

สำหรับไฟล์เทมเพลตอื่น ๆ Drupal ไม่ได้ให้ตัวแปรใด ๆ ที่บอกคุณว่าผู้ใช้กำลังเยี่ยมชมหน้าแรกหรือไม่ การใช้รหัสที่คล้ายกับที่ใช้จากtemplate_preprocess_page()นั้นคุณสามารถตั้งค่าตัวแปรนั้นในฟังก์ชัน preprocess สำหรับเทมเพลตที่คุณใช้

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

แทนที่HOOKด้วยประเภทเทมเพลต (เช่นฟิลด์สำหรับเทมเพลต field.hmtl.twig)


4

คุณสามารถรับโดยตรงใน html.html.twig โดยใช้ root_path มีเอาต์พุตในบรรทัด 31 เพื่อตั้งค่าคลาสร่างกาย:

{% ถ้าไม่ใช่ root_path%}

รหัส

{% endif%}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.