อาทิตย์, กุมภาพันธ์ 05, 2555
   
Text Size
ป้ายโฆษณา

Component Development Part 2 Based Controller

( 3 Votes )

ในตอนที่แล้วเราได้ทำความรู้จักับ Model View และ Controller แบบคร่าวๆ รวมทั้งไฟล์ Dispatcher ไปแล้วซึ่งก็ึคือไฟล์ที่มีชื่่อเดียวกับ component นั่นเอง ปกติแล้วใน Component หนึ่งๆ มักจะมีหลายๆ Entity ตามการออกแบบฐานข้อมูลใน ER Diagram และเราจะใช้ Controller หนึ่ง class ต่อ 1 Entity ตามที่ได้กล่าวมาแล้ว ซึ่งจากบทที่แล้วเราทราบว่าเรามีหลักในการตั้งชื่อ class ตามรูปแบบ [COMPONENT NAME]Controller[Entity NAME] โดย controller ต่างๆ เหล่านี้จะเก็บไว้ใน folder ชื่อ controllers และมีชื่อไฟล์ตาม ENTITY NAME ทั้งนี้เพื่อให้การ Include ไฟล์ทำได้ง่าย ตามตัวอย่าง code ในตอนที่ 1 เช่น

           /components/com_bookman/controllers/book.php                   เก็บ class ชื่อ BookmanControllerBook

           /components/com_bookman/controllers/reservation.php           เก็บ class ชื่อ BookmanControllerReservation

 แต่ก่อนอื่นเรามาดู Based controller กันก่อนครับ ไฟล์นี้ก็คือไฟล์แม่ของ Controller ที่อยู่ใน folder ชื่อ controllers นั่นเอง หรือในกรณีที่เรามีเพียง 1 Entity เราก็จะใช้ไฟล์นี้ในการเก็บ controller ของเรา (โอกาสน้อยครับที่จะมีเพียง 1 Entity ใน component) โดยไฟล์นี้อยู่ใน compoent root folder เช่นกรณี Bookman ก็อยู่ใน /components/com_bookman นั่นแหละครับ

ฺBookman Controller

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 จากรูปด้านบนจะเห็นว่าเรามี Method แค่หนึ่่ง Method คือ display ซึ่งเราทำการกำหนด view เป็น books และเรียก method display ของ class แม่ก็คือ JController ของ Joomla ซึ่งหากเราอยากเห็นว่ามันทำงานอย่างไรก็ลองเปิด JController มาดู ซึ่งจะอยู่ใน /libraries/joomla/application/component/controller.php ตามบรรทัดที่ 18 ในรูปด้านบนซึ่งเป็นการ include ไฟล์ controller.php ของ Joomla นั่นเอง

Display method of Joomla JController

 จาก code ด้านบนมันก็จะเป็นไปตาม State Diagram ที่ผมให้ไว้ในตอนที่ 1 นั่เองครับ คื

บรรทัดที่ 290 กำหนดชื่อของ view ที่จะเรียกใช้จาก URI ถ้าไม่มีใช้ชื่อของ controller อันนี้ใน base class ของเรากำหนดไว้เป็น books แล้วนะครับ

บรรทัดที่ 291 กำหนดขื่อของ view layout เป็น default เนื่่องจากเราไม่ได้ส่งมาใน URI

บรรทัดที่ 293 ทำการสร้าง object view ครับ อันนี้พร้อมใช้งานแล้ว

บรรทัดที่ 296-298 ถ้า load model ในชื่่อเดียวกันกับ viewname ได้ก็กำหนด model นี้ให้กับ view object ในที่นี้ model ก็จะมีชื่อเป็น books (BookmanModelBooks)

บรรทัดที่ 302 กำหนด layout ให้กับ view 

บรรทัดที่ 305-310 แสดงผล view โดยใช้ layout ทีี่กำหนด

             จาก code ด้านบนเมื่อเอามารวมกับ code ในส่วนของ Bookman สิ่งที่ BookmanControllerBooks จะทำใน function display คือการ load view ชื่อ books และกำหนด view เป็น HTML type (default) ส่วน layout ก็คือ default.php ดังนั้น Controller ก็จะหาไฟล์ใน /components/com_bookman/views/books/view.html.php เป็น view ที่ต้องใช้ ส่วน layout ก็จะเป็น /components/com_bookman/views/books/tmpl/default.php ครับซึ่งเราจะมาดูไฟล์ View นี้ในตอนที่สามนะครับ

หมายเหตุ เราจะเห็นว่า Joomla มีการ load object ต่างๆ มากมายให้เราอย่างในตัวอย่างนี้ก็คือ model books ซึ่งเราอาจจะไม่ได้ใช้ก็ได้ แต่ไม่ต้องวิตกครับเพราะ Joomla จะมีการใช้วิธีการสร้าง Object ไว้ในครั้งแรกที่เราเรียกใช้ หลังจากนั้นการเรียกครั้งต่อไปมันก็จะส่งตัวแปรนี้ให้เราโดยไม่ได้สร้าง object ใหม่อีก ทำให้ไม่กระทบ performance ครับซึ่งเราก็ควรใช้ technique นี้ในการพัฒนา extensions เช่นกัน

 

JoomlaWatch Stats 1.2.8b_12-dev by Matej Koval
Restore Default Settings