โดยทั่วไปแล้ว รายงานกราฟหรือรายงานต่างๆ ในระบบ จะเป็นโมดูลหนึ่งที่เป็นส่วนสุดท้ายของระบบเสมอ เพื่อสำหรับให้ User สามารถเรียกดูข้อมูลสรุปได้
แล้วถ้า User ต้องการ Link สำหรับเผยแพร่รายงานเหล่านั้นล่ะ Programmer อย่างเราจำเป็นต้องทำรายงานไว้สำหรับ User ในระบบของเรา 1 รายงาน และสำหรับบุคคลทั่วไปอีก 1 รายงานหรือไม่
คำตอบคือ ไม่จำเป็น
เพราะหากต้องการอัพเดทรายงาน เราจะเสียเวลามากขึ้นเป็น 2 เท่า หรือแม้แต่การอัพเดทที่หนึ่งแล้วลืมอัพเดทอีกที่ ก็จะเป็นปัญหาสำหรับผู้ใช้งานเช่นกัน
กระทู้นี้จะแนะนำเทคนิคเล็กๆ น้อยๆ ในการทำรายงานเดียว ให้สามารถเรียกใช้งานได้ทั้งแบบล็อกอินผ่านระบบ และแบบไม่ต้องล็อกอินกรณีเป็นบุคคลทั่วไปได้
เริ่มกันเลยดีกว่า
ให้มองว่า เรามี Controller 2 ตัว สำหรับเรียกใช้โดยผู้ใช้ทั่วไป (ล็อกอินเข้าใช้งานระบบ) และสำหรับบุคคลทั่วไป (ไม่ต้องล็อกอิน) ชื่อว่า report_in และ report_out ตามลำดับ และมีฟังก์ชันสำหรับประมวลผลตรงกลาง จะกำหนดไว้ใน Controller ใด Controller หนึ่ง หรือแยกออกมาเป็นอีก 1 Controller สำหรับเรียกใช้งานก็ได้ แล้วสุดท้ายให้ทั้ง 2 Controller (คือ report_in และ report_out) เรียกใช้งาน View เดียวกัน ดังรูป
พอมองภาพออกแล้วใช่มั้ยครับ ทีนี้เราจะลงในรายละเอียดกัน
ตัวอย่างโค้ดฝั่งล็อกอิน (ไฟล์ report_in)
ฟังก์ชัน rpt_testin() คือ เมนูสำหรับเรียกดูรายงานในระบบ
ในบรรทัดที่ 9 คือ การเรียกฟังก์ชันประมวลผลข้อมูลที่ต้องการ ก่อนส่งไปหน้า View เพื่อแสดงผล เช่น การเชื่อมโยงข้อมูลในฐานข้อมูล การกำหนดรูปแบบของข้อมูลก่อนไปแสดงผล (กำหนดเป็น Array กำหนดรูปแบบข้อมูลที่กราฟต้องการ) เป็นต้น โดยจากตัวอย่าง ฟังก์ชัน process_test() จะอยู่ใน Controller report_in เช่นกัน
บรรทัดที่ 10 คือ การกำหนดลิงค์ URL กรณีที่รายงานเรามีส่วนที่ให้ผู้ใช้งานสามารถคลิกค้นหาข้อมูลได้ ส่วนนี้จะต้องกำหนดที่ฟังก์ชันนี้ก่อน เพื่อให้ View รู้ว่าเมื่อคลิกค้นหาแล้ว จะต้องกลับไปที่ Controller ใด และ ฟังก์ชันใด (อย่าลืมว่าเรากำลังทำให้รายงานเราสามารถเข้าได้ 2 ทาง จาก 2 Controller หรือ 2 ฟังก์ชันนั่นเอง)
บรรทัดที่ 11 คือการเรียก View เพื่อแสดงผลข้อมูล โดยฟังก์ชัน output() เป็นฟังก์ชันแสดงเทมเพลตของระบบด้วย ซึ่งถ้าหน้าจอของบุคคลทั่วไปจะต้องไม่มีเทมเพลตของระบบติดไปด้วย (จะกล่าวใน Controller ของฝั่งบุคคลทั่วไปอีกทีนะครับ)
ทีนี้เรามาดูตัวอย่างโค้ดฝั่งที่ไม่ต้องล็อกอินกันบ้างครับ (ไฟล์ report_out)
ฟังก์ชัน rpt_testout() คือ ฟังก์ชันที่บุคคลทั่วไปสามารถเรียกใช้งานได้โดยไม่ต้องล็อกอินเข้าสู่ระบบ
ในบรรทัดที่ 9 คือ การเรียกฟังก์ชันประมวลผลข้อมูลที่ต้องการ ก่อนส่งไปหน้า View เพื่อแสดงผล ตัวอย่างนี้ เราจะเรียกฟังก์ชัน process_test() ที่อยู่ในไฟล์ Controller report_in ดังนั้น ในบรรทัดที่ 5 คือการเรียก Controller report_in ให้มันรู้จักก่อน
บรรทัดที่ 10 คือ การกำหนดลิงค์ URL สำหรับเมื่อผู้ใช้งานคลิกค้นหาที่หน้า View แล้ว ระบบจะพามาที่ Controller report_out และเรียก rpt_testout() ตามลำดับ
บรรทัดที่ 11 คือการเรียก View เพื่อแสดงผลข้อมูล โดยใช้ฟังก์ชัน $this->load->view() ทำให้หน้าจอฝั่งบุคคลทั่วไปนี้จะไม่มีเทมเพลตของระบบติดมาด้วย
อีกส่วนหนึ่งที่จะขอกล่าวถึง คือ ฟังก์ชันประมวลผล ซึ่งในตัวอย่างนี้ก็คือ ฟังก์ชัน process_test() (อยู่ในไฟล์ report_in)
ในบรรทัดที่ 15 คือ การรับค่าตัวแปรที่ส่งมาจากหน้า View ในรูปแบบ POST (จากการคลิกค้นหา)
บรรทัดที่ 17 – 18 คือ การค้นหาข้อมูล โดยเชื่อมโยงกับฐานข้อมูล
บรรทัดที่ 20 – 21 คือ การกำหนดค่าใส่ตัวแปรอาร์เรย์ ชื่อว่า data และคืนค่ากลับไปยัง Controller ที่เรียกใช้ฟังก์ชันนี้
แค่นี้ เราก็สามารถแสดงผลรายงานของเราบนหน้าจอ 2 ที่ต่างกันได้แล้วครับ
บทความต่อไปจะเป็นเรื่องอะไรนั้น…เจอกันครั้งหน้าครับ ขอบคุณครับ ^__^
Author : นายศักดา บุญภา (มิวสิค)