กำหนด regions เพิ่มเติมใน drupal 6.x

สำหรับคนที่จะทำเว็บไซต์ด้วย drupal แต่ติดขัดที่ drupal เตรียมพื้นที่ (regions) สำหรับให้เราวางกล่อง (Block) น้อยเกินไป ก็สามารถเพิ่มเติมได้ด้วยตัวเอง

(บล็อกนี้เขียนเล่าจากการใช้งาน โดยอ้างอิงจากบล็อกของ donuzz หากผิดพลาดตรงจุดไหน ผู้รู้ช่วยชี้แนะด้วยครับ )

โดยปกติทั่วไปแล้ว drupal 6.x จะเตรียม regions เอาไว้ประมาณ 5 regions คือ Header, Left sidebar, Content, Rigth sidebar และ Footer (ดูรูป 1)

figure1 drupal6x basic regions

((update: 2009-02-27 13:23))

แล้วถ้ากรณีที่เราต้องการสร้างหน้าพิเศษที่มีพื้นที่ (regions) ไม่เหมือนหน้าอื่น (ปกติ template ทั้งหมดของ drupal จะถูกเก็บอยู่ในไฟล์ page.tpl.php) เราจะต้องทำดังนี้
1. สร้าง page ว่างๆ (ซึ่งเป็น content types ประเภทหนึ่ง) แล้วกำหนดให้ URL path เป็นชื่อที่ต้องการ เช่น /newsupdate
2. สร้างไฟล์ page-newsupdate.tpl.php ไว้ในโฟลเดอร์ธีม เพื่อใช้เป็น template เฉพาะในหน้าที่เราต้องการ
3. เพิ่มโค้ดในไฟล์ template.php (ถ้าไม่มีให้สร้าง template.php ไว้ในโฟลเดอร์ธีม) ดูรายละเอียด http://drupal.org/node/139766 (อ้างอิงจากคอมเม้นท์ของ donuzz)
4. แก้ไขโค้ด php ภายในไฟล์ page-newsupdate.tpl.php ให้เป็นไปตามพื้นที่ (regions) ที่เราต้องการ โดยเพิ่ม <?php print $new_regions_name ?> (ดูรูป 2)

figure2 drupal custom regions

แล้วก็เพิ่มรายชื่อ regions ที่เราสร้างเพิ่มเติมไว้ในไฟล์ .info ของธีมนั้นๆ โดยเพิ่มคำสั่งดังนี้

// regions ที่มีอยู่เดิม
regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer

// regions ที่เรากำหนดขึ้นใหม่
regions[home_left] = Left homepage
regions[home_middle] = Middle hompeage
regions[home_bottom] = Bottom homepage

** หมายเหตุในการแก้ไข/เพิ่มเติม regions แต่ละครั้ง จะต้อง Clear cached data ในหน้า Site configuration > Performance เพื่อให้ drupal อัพเดทข้อมูลภายในระบบ **

เราก็จะสามารถมองเห็นรายชื่อ regions ได้ในหน้า Block