Codeigniter กับการสร้างรายงานเดียว ที่สามารถเข้าถึงได้ทั้งแบบล็อกอินผ่านระบบ และแบบไม่ต้องล็อกอิน

โดยทั่วไปแล้ว รายงานกราฟหรือรายงานต่างๆ ในระบบ จะเป็นโมดูลหนึ่งที่เป็นส่วนสุดท้ายของระบบเสมอ เพื่อสำหรับให้ 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 เดียวกัน ดังรูป

 

1

พอมองภาพออกแล้วใช่มั้ยครับ ทีนี้เราจะลงในรายละเอียดกัน

ตัวอย่างโค้ดฝั่งล็อกอิน (ไฟล์ report_in)

ฟังก์ชัน rpt_testin() คือ เมนูสำหรับเรียกดูรายงานในระบบ
2

ในบรรทัดที่ 9 คือ การเรียกฟังก์ชันประมวลผลข้อมูลที่ต้องการ ก่อนส่งไปหน้า View เพื่อแสดงผล เช่น การเชื่อมโยงข้อมูลในฐานข้อมูล การกำหนดรูปแบบของข้อมูลก่อนไปแสดงผล (กำหนดเป็น Array กำหนดรูปแบบข้อมูลที่กราฟต้องการ) เป็นต้น โดยจากตัวอย่าง ฟังก์ชัน process_test() จะอยู่ใน Controller report_in เช่นกัน

บรรทัดที่ 10 คือ การกำหนดลิงค์ URL กรณีที่รายงานเรามีส่วนที่ให้ผู้ใช้งานสามารถคลิกค้นหาข้อมูลได้ ส่วนนี้จะต้องกำหนดที่ฟังก์ชันนี้ก่อน เพื่อให้ View รู้ว่าเมื่อคลิกค้นหาแล้ว จะต้องกลับไปที่ Controller ใด และ ฟังก์ชันใด (อย่าลืมว่าเรากำลังทำให้รายงานเราสามารถเข้าได้ 2 ทาง จาก 2 Controller หรือ 2 ฟังก์ชันนั่นเอง)

บรรทัดที่ 11 คือการเรียก View เพื่อแสดงผลข้อมูล โดยฟังก์ชัน output() เป็นฟังก์ชันแสดงเทมเพลตของระบบด้วย ซึ่งถ้าหน้าจอของบุคคลทั่วไปจะต้องไม่มีเทมเพลตของระบบติดไปด้วย (จะกล่าวใน Controller ของฝั่งบุคคลทั่วไปอีกทีนะครับ)

 

ทีนี้เรามาดูตัวอย่างโค้ดฝั่งที่ไม่ต้องล็อกอินกันบ้างครับ (ไฟล์ report_out)

ฟังก์ชัน rpt_testout() คือ ฟังก์ชันที่บุคคลทั่วไปสามารถเรียกใช้งานได้โดยไม่ต้องล็อกอินเข้าสู่ระบบ

3

ในบรรทัดที่ 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)

4

ในบรรทัดที่ 15 คือ การรับค่าตัวแปรที่ส่งมาจากหน้า View ในรูปแบบ POST (จากการคลิกค้นหา)

บรรทัดที่ 17 – 18 คือ การค้นหาข้อมูล โดยเชื่อมโยงกับฐานข้อมูล

บรรทัดที่ 20 – 21 คือ การกำหนดค่าใส่ตัวแปรอาร์เรย์ ชื่อว่า data และคืนค่ากลับไปยัง Controller ที่เรียกใช้ฟังก์ชันนี้

 

แค่นี้ เราก็สามารถแสดงผลรายงานของเราบนหน้าจอ 2 ที่ต่างกันได้แล้วครับ

บทความต่อไปจะเป็นเรื่องอะไรนั้น…เจอกันครั้งหน้าครับ ขอบคุณครับ ^__^

Author : นายศักดา บุญภา (มิวสิค)