เวลาพัฒนาโมดูล / ธีมใน Drupal สิ่งหนึ่งที่มักจะต้องทำบ่อยๆ คือการ dump ค่าตัวแปรใน Drupal ออกมาดู วิธีที่ง่ายที่สุดคือใช้คำสั่ง print_r(<variable>) แต่ผลลัพธ์ที่ได้ส่วนใหญ่จะเป็น string เละๆ อยู่ในส่วนบนสุดของหน้านั้นๆ ทำให้อ่านลำบากอย่างแรง
เห็น @sugree แนะนำบ่อยๆ ว่าให้ใช้ drupal_set_message() เวลา dump ค่าตัวแปร ลองดูแล้วปรากฏว่ามันใช้ไม่ได้กับ print_r() เนื่องจาก print_r() จะพรินท์ค่าออกมาทันที ไม่ได้ return ค่าเป็น string กลับมาให้ drupal_set_message()
วิธีแก้คือใช้ output buffering ช่วยอีกที สมมติว่าต้องการ dump ค่าในตัวแปร $vars['node'] ก็เขียนโค้ดแบบนี้
@sikachu มาชี้ทางสว่างให้ว่าจริงๆ แล้ว print_r() มัน return ค่าเป็น string กลับมาได้ ถ้าใส่ parameter ตัวที่สองให้เป็น TRUE จากนั้นเอามารวมกับโค้ดที่ @onequad บอกมา จะได้โค้ดสำหรับ dump ตัวแปร $vars['node'] เป็น
<?php drupal_set_message('<pre>' . htmlspecialchars(print_r($vars['node'], TRUE), ENT_QUOTES) . '</pre>'); ?>
จะได้โครงสร้างของตัวแปร $vars['node'] อยู่ในกล่องข้อความของ Drupal อย่างเป็นระเบียบเรียบร้อย อ่านง่ายกว่าเดิมเยอะ :)

6 comments
print_r ตั้งแต่ PHP 4.3.0 มันสามารถ set parameter ตัวที่สองให้เป็น true เพื่อให้ return string ได้ครับ
อ่าน doc ไม่ละเอียด =.=
ง่ายกว่าเดิมมากๆ ขอบคุณครับ :P
โอ๊ะ .. reference ครับ
http://th2.php.net/print_r
http://drupal.org/phptemplate แนะนำให้ทำแบบนี้ครับ
แต่ถ้าข้อมูลเยอะๆมันจะเดี้ยงเหมือนกัน ไม่รู้ทำไม
ผมเคยเห็นใน user/user-profile.tpl.php เค้าแนะนำอันนี้ครับ
แบบนี้ก็ใช้ได้ครับ เพราะ
check_plain()มันจะไปเรียกใช้htmlspecialchars()อีกที แถมพิมพ์สั้นกว่าด้วย :)Post new comment