สามารถพิมพ์ภูมิภาคภายในเทมเพลตโหนดหรือภูมิภาคนั้น จำกัด ขอบเขตไว้ที่เทมเพลตหน้าอย่างเคร่งครัดหรือไม่
สามารถพิมพ์ภูมิภาคภายในเทมเพลตโหนดหรือภูมิภาคนั้น จำกัด ขอบเขตไว้ที่เทมเพลตหน้าอย่างเคร่งครัดหรือไม่
คำตอบ:
คุณสามารถพิมพ์ภูมิภาคภายในเทมเพลตใด ๆ แต่พวกเขาไม่พร้อมใช้งานในกล่องในnode.tpl.phpเทมเพลต หากต้องการทำให้พร้อมใช้งานคุณจะสร้างตัวแปรใหม่สำหรับใช้ในnode.tpl.phpเทมเพลตที่จะมีเนื้อหาภูมิภาคทั้งหมด
การสร้างตัวแปรเท็มเพลตใหม่ทำได้โดยใช้ฟังก์ชัน preprocess ในtemplate.phpไฟล์ธีมของคุณสร้างฟังก์ชั่นที่มีลักษณะดังนี้:
function mytheme_preprocess_node(&$variables) {
}
การแทนที่mythemeด้วยชื่อย่อของธีมของคุณ ตอนนี้เพื่อให้ Drupal รู้จักฟังก์ชัน preprocess ใหม่นี้คุณต้องสร้างชุดรูปแบบรีจิสตรีของไซต์ของคุณใหม่ สิ่งนี้ตรงไปตรงมาเหมือนกับการกำหนดค่า → การพัฒนา → ประสิทธิภาพและกดปุ่ม "ล้างแคชทั้งหมด" ที่ด้านบน
ในตอนนี้ฟังก์ชั่นการทำงานของ preprocess ก็คือ$variablesมีอาร์เรย์ที่สอดคล้องกับตัวแปรที่มีอยู่ของแม่แบบ ยกตัวอย่างเช่นในnode.tpl.php, $submittedมีนามปากกาผู้เขียน ในฟังก์ชั่น preprocess $variables['submitted']ที่กล่าวมานั้นพบใน
ในการเลียนแบบสิ่งที่คุณมีในpage.tpl.phpที่ซึ่งคุณมีอาร์เรย์ที่เรียก$pageว่ามีภูมิภาคทั้งหมดคุณต้องการเติม$variables['page']ข้อมูล
ปัญหาคือมีคนอยู่$pageในnode.tpl.phpนั้นด้วยค่าจริง / เท็จที่ช่วยให้คุณรู้ว่าคุณกำลังดูที่โหนดด้วยตัวเองหรือในรายการ
ดังนั้นเพื่อหลีกเลี่ยงการชนกันของชื่อให้เติม$regionแทน:
function mytheme_preprocess_node(&$variables) {
  // Get a list of all the regions for this theme
  foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {
    // Get the content for each region and add it to the $region variable
    if ($blocks = block_get_blocks_by_region($region_key)) {
      $variables['region'][$region_key] = $blocks;
    }
    else {
      $variables['region'][$region_key] = array();
    }
  }
}
จากนั้นในnode.tpl.phpเทมเพลตของชุดรูปแบบของคุณคุณสามารถแสดงผลภูมิภาคใด ๆ โดยทำดังต่อไปนี้:
<?php print render($region['sidebar_first']); ?>
ในกรณีที่sidebar_firstเป็นชื่อของภูมิภาคที่คุณต้องการที่จะทำให้
<?php print render(block_get_blocks_by_region('machine_name_of_your_region'));?>แก้ปัญหาสกปรกรวดเร็วที่ทำงานให้ฉัน จากที่นี่: webomelette.com/add-region-node-template
                    block_get_blocks_by_region()ส่งคืนอาร์เรย์ของบล็อกเท่านั้นและหากคุณต้องการแสดงผลเป็นพื้นที่คุณต้องเพิ่ม wrapper ของภูมิภาค