ฉันจะแสดงชื่อโหนดปัจจุบันใน page.html.twig OR ใน node.html.twig ได้อย่างไร


14

หากฉันต้องการแสดงชื่อโหนดปัจจุบันใน page.html.twig (โดยค่าเริ่มต้นดูเหมือนว่าจะมีให้เฉพาะใน node.html.twig) ฉันต้องสร้างฟังก์ชั่น preprocess ดังนี้:

function theme_preprocess_page(&$variables, $hook) {
  // Set our page title so we can access it in page.html.twig
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    $variables['my_node_title'] = $node->title->value;
  }
}

และจากนั้นฉันต้องเขียนทับ page-title.html.twig โดยคัดลอกลงในโฟลเดอร์ธีมปัจจุบันของฉันและแสดงความคิดเห็นทุกอย่าง

ดูเหมือนจะไม่ "ถูกต้อง" มีวิธีที่ดีกว่า?

คำตอบ:


21

โหนดพร้อมใช้งานในเทมเพลตหน้าtemplate_preprocess_pageแล้วดังนั้นจึงไม่จำเป็นต้องใช้ฟังก์ชัน preprocess คุณสามารถส่งออกชื่อเรื่องด้วย:

{{ node.label }}

ชื่อหน้าตัวเองเป็นบล็อกดังนั้นหากคุณไม่ต้องการมันอีกต่อไปเพียงแค่ลบออกจากภูมิภาคที่ / admin / โครงสร้าง / บล็อก ไม่จำเป็นต้องคัดลอกแม่แบบไปยังธีมของคุณหรือแก้ไขต้นฉบับ


นี้ดูเหมือนจะไม่ทำงานในหน้าแรกที่เป็นเพียงnode NULLมีวิธีที่จะได้รับชื่อหน้าใด ๆ รวมถึงชื่อหน้าแรก (แม้ว่าจะใช้การแทนที่ชื่อ )?
Florian Brucker

นั่นคือ @FlorianBrucker ที่ถูกต้อง - ยกเว้นว่าหน้าแรกเป็นโหนดคุณจะไม่สามารถใช้ตัวแปรโหนดได้ ชื่ออาจจะอยู่ในpage['#title']ผมไม่แน่ใจว่าจะมีการแทนที่ใด ๆ ที่ทำด้วยวิว ( แต่อาจ)
ไคลฟ์

@Clive แต่น่าเสียดายที่page['#title']เป็นสตริงที่ว่างเปล่าในpage.html.twigมากกว่าที่นี่
Florian Brucker

น่าเสียดายที่ฉันคิดว่ามันถูกต้องในบางจุดในอดีตไม่ชัดเจนในขณะนี้ คำถามที่คล้ายกันนี้อาจช่วยได้
ไคลฟ์

@ Clive ขอบคุณสำหรับตัวชี้ แต่นั่นก็ไม่ได้ช่วยฉันเช่นกัน ผมเคยโพสต์คำถามเกี่ยวกับเรื่องนี้
Florian Brucker

3

คุณสามารถเพิ่มโค้ดด้านล่างไว้ด้านบนnode.html.twigในโฟลเดอร์แม่แบบของธีมของคุณ:

{% if not page %}
  <h2{{ title_attributes }}>
    <a href="{{ url }}" rel="bookmark">{{ label }}</a>
  </h2>
{% endif %}

{% if page %}
  <h2{{ title_attributes }}>
    {{ label }}
  </h2>
{% endif %}

0

รหัส Drupal 8 สำหรับการทำสิ่งที่รหัสที่คุณแสดงควรทำคือรหัสต่อไปนี้

function theme_preprocess_page(&$variables) {
  $request = \Drupal::request();
  $route_match = \Drupal::routeMatch();
  if ($route_match->getParameter('node')) {
    $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
    $variables['my_node_title'] = $page_title;
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.