พัฒนาระบบลงทะเบียน Online ตอนที่ 4
แก้ไขล่าสุด ใน วันพฤหัสบดีที่ 30 กันยายน 2553 เวลา 23:34 น. เขียนโดย ประสิทธิ์ เก็บทรัพย์ วันพฤหัสบดีที่ 23 กันยายน 2553 เวลา 14:45 น.
ในตอนที่แล้วเราค้างไว้ในส่วนของ view เนื่องจากยังไม่มีข้อมูลมาแสดง สำหรับตอนนี้เราจะมาดูการ load ข้อมูลจากฐานข้อมูลกันโดยใช้ Model นะครับ สำหรับตัว Model ของเราในตอนนี้ยังคงเป็น Schedules Model อยู่ครับ ก็ให้เราทำการสร้าง Folder ชื่อ controllers และสร้างไฟล์ schedules.php ของเราขึ้นมา ซึ่งนี่จะเป็นไฟล์ที่เก็บ Class ของเรา คือ RegonlineControllerSchedules ครับ ลองดูไฟล์ตั้งต้นของมันครับ

บรรทัดที่ 6 เป็นการ import ตัว JModel class ของ Joomla ซึ่งเป็น Parent Class ของเรา
บรรทัดที่ 8 การตั้งชื่อ Class ก็ยังใช้รูปแบบเดิมแบบเดียวกับ Controller และ View
บรรทัดที่ 10-14 เป็นตัวแปร Private ของ Class แต่เนื่องจากใน PHP 4 ยังไม่รองรับเราก็ใช้แบบธรรมด ถ้าเป็น PHP5 เราสามารถใช้ private keyword ได้แล้ว
บรรทัดที่ 16 เป็น Constructor ของ class ซึ่งต่อไปเราจะทำการเขียนเพิ่ม แต่ตอนแรกเราแค่ทำการเรียก Constructor ของ Parent Class โดยตัวแปร config ซึงเป็น Array นี้เราสามารถผ่านค่าเริ่มต้นไปได้เช่น 'dbo' เป็นต้น อันนี้ต้องดูเพิ่มเติมใน JModel
บรรทัดที่ 21 และ 29 เป็น method ที่เราเรียกใช้ใน view จากตอนที่ 3 ซึ่งทำการ load ข้อมูลในรูปแบบ array และการสร้าง pagination object สำหรับการแสดงผลแบบจัดหน้าอัฒโนมัติ
บรรทัดที่ 33 ทำการสร้าง Query สำหรับใช้ใน getItems() และ getTotal() อันนี้ก็เป็น private method เหมือนกัน
ต่อไปเราจะมาดูกันทีละ method นะครับ

จาก code ในส่วนของ constructior ข้างบนเป็นส่วนของ constructor ซึ่งทำการเรียกใช้ constructor ของ JView หลังจากนั้นเป็นการอ่านค่าต่างๆ จาก URI และกำหนดเป็นค่าเริ่มต้นใน model โดยจะมีส่วนของการแบ่งหน้า (pagination) คือ limit และ limitstart นอกจากนี้ยังมีตัวแปรที่ใช้สำหรับการค้นหาจากรายการทั้งหมดอีกด้วย ในบรรทัดที่ 22 เราจะเห็น method ของ JApplication คือ getUserStateFromRequest ซึ่งจะมีการใช้งานมากในภายหลัง สำหรับการทำงานของมันคือมันจะทำการอ่านค่าตัวแปรจาก URI ที่มีขื่อตาม parameter ตัวที 2 ถ้าไม่เจอจะทำการอ่านจาก Session ซึ่งมี namespace ตาม paramter ที่ 1 รวมทั้งทำการบันทึกลงใน session ด้วย ซึ่งวิธีการนี้จะทำให้ในแต่ละ form สามารถกำหนด field ให้เหมือนกันได้
ในส่วนของบรรทัดที่ 30-32 เป็นการกำหนดตัวแปรให้กับ model โดยที่เราสามารถกำหนดได้ตลอดในช่วง run time โดยการกำหนดจะอยู่ในรูปของ setState($name, $value) และอ่านค่าจาก get($name) เอาล่ะครับต่อไปมาดู getItems() กันต่อ

สำหรับในส่วนของ method getItems() เราจะทำการตรวจสอบว่าค่า $this->_items ยังว่างอยู่หรือไม่ ถ้าว่าวอยู่ซึ่งแสดงว่าเรียกใช้ครั้งแรกเราก็ทำการสร้าง query ตามนี้ครับ
บรรทัดที่ 39 เรียกใช้ function เพื่อทำการสร้าง SQL สำหรับทำการ query ฐานข้อมูล
บรรทัดที่ 40 เราทำการกำหนดค่า query ให้กับ object ฐานข้อมูล พร้อมทั้งกำหนดค่า limit และ limitstart สำหรับการแบ่งหน้า
บรรทัดที่ 41 ทำการ query และกำหนดผลที่ได้ในตัวแปร _items ของ class และบรรทัดที่ 44 ส่งค่ากลับให้ caller

ในส่วนของ method getTotal เพื่อหาจำนวน record ทั้งหมดก็จะคล้ายๆ กับ getItems() แต่จะเป็นการเก็บตัวแปรจำนวน records ทั้งหมดตามเงือนไขของ query เพื่อใช้ในการสร้าง pagination object ใน method getPagination()
บรรทัดที่ 63 ทำการ load ไฟล์ library เกี่ยวกับการแบ่งหน้าของ Joomla หากยังไม่เคน load ไฟล์นี้มาก่อน (ลักษณะการเรียกใช้ jimport จะเป็นการเริ่มต้น load จาก folder ชื่อ libraries ใน Joomla โดยจุดแทน DIRECTORY SEPARATOR คือ / นั่นเองลักษณะการ load เราสามารถ load ทีละไฟล์เช่นตัวอย่างในบรรทัดที่ 63 หรือจะ load แบบ joomla.html.* แสดงว่าเป็นการ load ไฟล์ทั้งหมดใน /libraries/joomla/htm/ ครับ)
บรรทัดที่ 64 ทำการสร้าง object ของ JPagination class และ บรรทัดที่ 66 ทำการส่งค่ากลับให้ caller
| พัฒนาระบบลงทะเบียน Online ตอนที่ 3< ย้อนกลับ | ถัดไป >พัฒนา Joomla! 1.5 Module ตอนที่ 1 |
|---|


