สามารถพิมพ์ภูมิภาคภายในเทมเพลตโหนดหรือภูมิภาคนั้น จำกัด ขอบเขตไว้ที่เทมเพลตหน้าอย่างเคร่งครัดหรือไม่
สามารถพิมพ์ภูมิภาคภายในเทมเพลตโหนดหรือภูมิภาคนั้น จำกัด ขอบเขตไว้ที่เทมเพลตหน้าอย่างเคร่งครัดหรือไม่
คำตอบ:
คุณสามารถพิมพ์ภูมิภาคภายในเทมเพลตใด ๆ แต่พวกเขาไม่พร้อมใช้งานในกล่องใน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 ของภูมิภาค