การพิมพ์ภูมิภาคใน html.tpl.php


10

ฉันต้องการแสดงผลบางภูมิภาคในเทมเพลต html.tpl.php เนื่องจากสิ่งเหล่านี้จะไม่เปลี่ยนแปลงระหว่าง page.tpl.php และ page-front.tpl.php (เพียงเพื่อชื่อสอง) โดยทั่วไปฉันต้องการหลีกเลี่ยงการทำซ้ำรหัส

อย่างไรก็ตามดูเหมือนว่าจะไม่มีอะไรเกี่ยวข้องกับภูมิภาคใน html.tpl.php และฉันไม่สามารถดึงข้อมูลใด ๆ ได้โดยใช้ drupal_get_region_content (ทั้งที่มีและไม่มีพารามิเตอร์

ไอเดีย?


คุณใช้drupal_set_region_content()เพื่อตั้งเนื้อหาภูมิภาคหรือไม่?
kiamlaluno

2
ไม่มีฟังก์ชั่นดังกล่าว บางทีคุณอาจจะตั้งใจdrupal_add_region_content()แต่ฉันไม่เห็นจุดนั้น: ฉันกำหนดเนื้อหาของภูมิภาคผ่านส่วนต่อประสานผู้ดูแลระบบของบล็อก
Morpheu5

1
drupal_add_region_content()ใช่ฉันหมายถึง
kiamlaluno

คำตอบ:


18

ฉันแก้ไขเช่นนี้

function mytheme_preprocess_html(&$variables) {
    $variables['region_name'] = block_get_blocks_by_region('region_name');
}

แล้วฉันก็ทำได้

<?php print render($region_name) ?>

ทำไมต้องใช้เสียงสะท้อน แน่นอนมันใช้งานได้
SDMulroy

แน่นอนว่าถ้าฉันใช้โมดูลหรือธีมสาธารณะฉันจะถูกบังคับให้ทำตามมาตรฐานชุมชน นี่เป็นธีมที่กำหนดเองซึ่งถูกใช้โดยลูกค้าของฉันเท่านั้น
Morpheu5

ฉันรู้ว่านี่เป็นโพสต์ที่เก่ามาก แต่ฉันคิดว่ามันเป็นการตัดสินใจที่ไม่ดีที่จะยอมรับคำตอบที่ผู้เขียนคำตอบอย่างขี้เกียจตอบคำถาม เช่นคุณจัดให้มีฟังก์ชั่นเพื่อเพิ่ม แต่สมมติว่าผู้อ่านทุกคนจะรู้ได้อย่างน่าอัศจรรย์ว่ารหัสนี้ควรอยู่ที่ใด นั่นคือส่วนที่ขี้เกียจและฉันลงคะแนนนี้เพราะมันไม่ได้ให้อะไรกับผู้ใช้มือใหม่ / ผู้พัฒนา
Skittles

ฉันขอขอบคุณที่คุณป้อนข้อมูลและความจริงที่ว่าสามเณรอาจไม่ได้รับคำอธิบายที่สมบูรณ์ อย่างไรก็ตามโปรดพิจารณาว่าก) การให้นมช้อนทำสำหรับมือใหม่ที่ขี้เกียจและ b) สำหรับทุกคนที่ได้อ่านเอกสารอย่างรวดเร็ว (เพราะมือใหม่ที่ไม่ใช่ผู้ที่ขี้เกียจควรมี) ตำแหน่งของฟังก์ชันนั้นค่อนข้างชัดเจน หากไม่มีแสดงว่ามีคู่มือสำหรับเหตุผลที่ดี คำถามของฉัน (และคำตอบ) เกี่ยวข้องกับปัญหาในระดับที่สามารถใช้ความรู้พื้นฐานบางอย่างเกี่ยวกับชุดรูปแบบ Drupal ได้ นอกจากนี้เป็นเว็บไซต์ถามตอบไซต์เอกสารอยู่ติดกัน
Morpheu5

1
@Skitties เราไม่สามารถทำซ้ำเอกสารได้ที่นี่เพียงเพราะผู้ใช้ใหม่ไม่สามารถรู้ได้ว่าฟังก์ชั่น preprocess ใดอย่างที่แสดงในคำถามคืออะไร นั่นไม่ได้เป็นส่วนหนึ่งของคำถาม หากผู้ใช้มีฟังก์ชั่นการประมวลผลคำถามเบื้องต้นที่เฉพาะเจาะจงพวกเขาจะถามคำถามใหม่
kiamlaluno

2

drupal_get_region_content()ผลตอบแทนที่ได้เนื้อหาที่ได้รับการตั้งกับสายก่อนหน้านี้drupal_add_region_content()แต่จะไม่รวมถึงเนื้อหาของบล็อกซึ่งจะแสดงในหน้าผ่านblock_page_build ()

หากคุณค้นหา "drupal_add_region_content" ในซอร์สโค้ด Drupal คุณจะสังเกตเห็นว่าฟังก์ชันนั้นถูกเรียกโดย:

  • drupal_get_region_content()
  • install_display_output()
  • template_preprocess_maintenance_page()
  • update_task_list()

สิ่งที่คุณตั้งไว้สำหรับบล็อกในหน้าการบริหารที่อยู่ในภูมิภาคซึ่งบล็อกที่จะแสดง แต่เนื้อหาของพวกเขาจะไม่ได้เพิ่มกับdrupal_add_region_content(); ในความเป็นจริงไม่มีฟังก์ชั่นที่ระบุไว้ข้างต้น (ซึ่งเป็นฟังก์ชั่นเดียวที่เรียกdrupal_add_region_content()ยกเว้นรหัสสำหรับการทดสอบการติดตั้ง Drupal) สำหรับการแสดงผล / เพิ่มเนื้อหาบล็อก

block_page_build()หากคุณต้องการที่จะทำให้บล็อกในรหัสของคุณเองคุณควรตรวจสอบรหัสที่ใช้ในการ โดยเฉพาะอย่างยิ่งนี่คือรหัสที่อาจมีประโยชน์มากกว่าสำหรับคุณ:

  // Fetch a list of regions for the current theme.
  $all_regions = system_region_list($theme);

  $item = menu_get_item();
  if ($item['path'] != 'admin/structure/block/demo/' . $theme) {
    // Load all region content assigned via blocks.
    foreach (array_keys($all_regions) as $region) {
      // Assign blocks to region.
      if ($blocks = block_get_blocks_by_region($region)) {
        $page[$region] = $blocks;
      }
    }
    // …
  }

สองบรรทัดแรกตรวจสอบหน้าที่แสดงอยู่ไม่ใช่หน้าตัวอย่างที่ใช้แสดงตำแหน่งที่วางธีมของพื้นที่

หากคุณต้องการสร้างการแสดงผลบล็อกในลักษณะที่แตกต่างกันมีความเป็นไปได้มากกว่าที่คุณสนใจที่จะเอาชนะtheme_block ()ในธีมของคุณหรือ (อาจมากกว่า) สร้างไฟล์เท็มเพลต block.tpl.php ที่กำหนดเอง อีกวิธีในการเปลี่ยนวิธีการแสดงบล็อกคือการใช้ฟังก์ชัน preprocess สำหรับบล็อก ( hook_preprocess_block () )

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