พัฒนาระบบลงทะเบียน Online ตอนที่ 1
แก้ไขล่าสุด ใน วันจันทร์ที่ 27 กันยายน 2553 เวลา 19:04 น. เขียนโดย MrS.Siam วันอาทิตย์ที่ 28 มิถุนายน 2552 เวลา 23:26 น.
สวัสดีครับ สำหรับบทความในชุดนี้ผู้เขียนขอนำเสนอขั้นตอนการพัฒนา component แบบเต็มรูปแบบ เพื่อที่จะทำให้ท่านผู้อ่านเข้าใจขั้นตอนการพัฒนา Joomla! 1.5 Native Component มากที่สุด ดังคำว่า สองตาเห็นไม่เท่ากับลงมือทำเอง ซึงผู้เขียนจะพยายามถ่ายทอดบทความออกมาตามที่พัฒนา Component จริงๆ โดยผู้เขียนนำ Requirements มาจาก Component ที่พัฒนาขึ้นเพื่อใช้งานในบริษัท โดยตัดบางส่วนที่เกี่ยวข้องกับระบบบริหารงานบุคคล (Human Resource Management) ซึ่งเป็น Component อีกตัวหนึ่งออกไป โดย Component นี้เดิมเป็น Joomla 1.0 Component โดยนำมาเขียนใหม่หมดเพื่อเป็นแนวทางในการศึกษาการเขียน Component บน Joomla 1.5 โดยเฉพาะ Component ทีั่ว่านี่คือระบบลงทะเบียน Online ครับ มาเริ่มกันเลยครับ
Requirements
ก่อนการเริ่มเขียน Component หรือไม่ว่าโปรแกรมใดๆ เราต้องเริ่มที่ขั้นแรกของการทำงาน คือการรวบรวมความต้องการของผู้ใช้หรือ Requirements โดยในที่นี้เราจะไม่พูดถึงวิธีก่ารที่ว่าทำอย่างไรให้ได้ Requirements มานะครับ แต่เราจะมาสรุป Requirements ของระบบลงทะเบียน Online กันเลยนะครับ โดยเราจะเรียก Component ของเราว่า regonline จริงๆ แล้วชื่อของ Component ก็สำคัญนะครับ เพราะว่าการตั้งชื่่อ Component ของเราอาจจะซ้ำกับ Component อื่นได้ และตามที่ทราบกันนะีครับ เราไม่สามารถติดตั้ง Component ที่มีชื่อซ้ำกันได้ ถ้าเราทำงานเพื่อเผยแพร่บน Communityจริงอาจจะลงทะเบียนกับ Joomla! อย่างเป็นทางการก็ได้นะครับ แต่ว่าตอนนี้เรามาสรุป Requirements ของระับบกันก่อน
- ระบบต้องสามารถรองรับการจัดการหลักสูตร คือ เพิ่ม ลบ แก้ไข หรือ เผยแพร่หรือยกเลิกการเผยแพร่ได้
- เพิ่ม ลบ แก้ไข หรือ เผยแพร่หรือยกเลิกการเผยแพร่รอบของการอบรมได้
- ระบบต้องสามารถรองรับการจัดหลักสูตรอบรมต่อหลักสูตรได้มากกว่าหนึ่งรอบ
- ระบบจะต้องสามารถกำหนดช่วงที่สามารถลงทะเบียนได้
- แต่ละกำหนดการจะต้องสามารถกำหนดจำนวนขั้นต่ำ จำนวนสูงสุดที่สามารถรับได้ หากเต็มแล้วระบบจะต้องปิดรับการลงทะเบียน
- ผู้ใช้ต้องลงทะเบียนเข้าระบบ และต้อง Login ก่อนจึงจะสามารถทำการลงทะเบียนได้
- ระบบสามารถอนุญาติให้ผู้ดูแลสามารถ อนุมัติหรือปฏิเสธการลงทะเบียนอบรมได้
ออกแบบฐานข้อมูล
ขั้นตอนต่อไปที่เราจะต้องทำคือการนำ Requirements มาทำการออกแบบฐานข้อมูล เพื่อที่จะได้รู้ว่าเราจะมี Entity ใดบ้างสำหรับท่านที่ไม่ทราบว่า Entity คืออะไรขอให้กลับไปดูเรืิื่องการออกแบบฐานข้อมูล และ Entity Relationship Diagram หรือ ER Diagram ก่อนนะครับ โดยหลักการในตั้งชื่อ table ใน Joomla เราจะยึดหลักการตั้งชื่่อที่ประกอบไปด้วย
- Prefix เป็นส่วนที่ทำให้เราสามารถติดตั้ง Joomla บนฐานข้อมูลเดียวกันได้มากกว่าหนึ่ง Site โดยทั่ไปเราจะใช้ jos_ แต่เราสามารถใช้ตัวอื่นได้นะครับ ขึ้นอยู่กับระบบของ Site
- Component Name ในที่นี้ component ของเราคือ regonline
- Entity เป็นสิ่งที่เราสนใจในแต่ละ table โดยผู้เขียนจะใช้ plural คือเติม s นั่นเอง เนื่องจากมันเก็บ Entity หลายๆ ตัวใน table ไงครับ
โดยจาก Requirements เราสามารถออกแบบมาได้เป็น 3 Entities หรือสามาตารางดังรูปด้านล่าง

จากรูปด้านบน และจากกฎการตั้งชื่อ table ที่เรากล่าวมาเราได้สาม table โดยมีรูปแบบตามกฎการตั้งชื่อ table และรองรับ Requirements ตามที่ต้องการ ในที่นี้เรามี Entity ดังนี้คือ
- Course คือหลักสูตรหนึ่งหลักสูตร
- Courses คือ เป็นรายการของหลักสูตร (List of Courses)
- Schedule คือกำหนดการอบรมหนึ่งรายการ
- Schedules คือรายการของกำหนดการฝึกอบรม (List of Schedules)
- Registration คือการลงทะเบียนหนึ่งรายการ
- Registrations คือรายการของการลงทะเบียน (List of Registrations)
จะเห็นนะครับว่าเรา มีสามตาราง แต่มีถึง 6 Entity ซึ่งส่วนที่เพิ่มมาก็คือรายการของ Entity เช่นในการที่ผู้ใช้กดเมนูเข้าสู่ระบบการลงทะเบียน online สิ่งแรกที่เราจะต้องแสดงให้ผู้ใช้เห็นก็คือ รายการที่เปิดให้สามารถลงทะเบียนได้ ซึ่งก็คือ Entity ที่ชื่ิอว่า Schedules นั่นเองและนี่จะเป็น Controller ตัวแรกที่ทำงานเป็น Default Controller อย่าลื่มหลักการที่เราเคยพูดกันในส่วนของ MVC นะครับ นั่นคือเราจะใช้ 1 Controller ต่อ 1 Entity ที่นี้สิ่งที่เราต้องมาดูต่อ คือ Entity และ task แต่ก่อนอื่นก็สร้าง table ทั้งสามในฐานข้อมูลของ Joomla! ที่เราติดตั้งโดยใช้ phpMyAdmin หรือ Tool อื่นๆ ก็ได้ ในที่นี้ผู้เขียนใช้ MySQL Workbench ในการออกแบบซึ่งสามารถสร้าง code เพื่อนำมาสร้างตารางได้ดังนี้ (ตัดส่วน Foreign Key ออกไปจาก code)
-- -----------------------------------------------------
-- Table `jos_regonline_courses`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `jos_regonline_courses` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(100) NOT NULL ,
`description` VARCHAR(100) NOT NULL ,
`checked_out` INT UNSIGNED NOT NULL DEFAULT 0 ,
`checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00' ,
`published` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 ,
PRIMARY KEY (`id`) )
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
-- -----------------------------------------------------
-- Table `jos_regonline_schedules`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `jos_regonline_schedules` (
`id` INT NOT NULL AUTO_INCREMENT ,
`course_id` INT UNSIGNED NOT NULL ,
`title` VARCHAR(200) NOT NULL ,
`start_datetime` DATETIME NOT NULL ,
`end_datetime` DATETIME NOT NULL ,
`min_limit` INT UNSIGNED NOT NULL DEFAULT 0 ,
`max_limit` INT UNSIGNED NOT NULL DEFAULT 0 ,
`register_start` DATETIME NOT NULL ,
`register_end` DATETIME NOT NULL ,
`checked_out` INT UNSIGNED NOT NULL DEFAULT 0 ,
`checked_out_time` DATETIME NOT NULL DEFAULT '0000-00-00 ' ,
`published` TINYINT UNSIGNED NOT NULL DEFAULT 1 ,
`jos_regonline_courses_id` INT UNSIGNED NULL ,
PRIMARY KEY (`id`) )
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
-- -----------------------------------------------------
-- Table `jos_regonline_registrations`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `jos_regonline_registrations` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`user_id` INT NOT NULL ,
`schedule_id` INT UNSIGNED NOT NULL ,
`created` DATETIME NOT NULL ,
`status` TINYINT UNSIGNED NOT NULL DEFAULT 0 ,
`jos_regonline_schedules_id` INT NULL ,
PRIMARY KEY (`id`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
Entities และ Tasks
หลังจากที่เราได้ Entity แล้วหรือถ้าตาม MVC ของ Joomla 1.5 ก็คือเราได้ Controller แล้วนั่นเอง สิ่งที่เราต้องมาดูกัน คือในแต่ละ Entity ผู้ใช้สามารถทำอะไรกับมันได้บ้าง อันนี้ก็ดูตาม Requirements ซึ่งสรุปคร่าวๆ ได้ดังนี้ครับ ในรายการย่อยคือ task ของแต่ละ Controller ครับ
- Course
- Display
- Add
- Edit
- Delete
- Save
- Publish/Unpublish
- Courses
- Display
- Schedule
- Display
- Add
- Edit
- Delete
- Save
- Publish/Unpublish
- Register
- Schedules
- Display
- Registration
- Display
- Save
- Approve
- Reject
- Delete
- Registrations
- Display
สำหรับท่านที่ได้อ่าน Component Development ทั้งสี่ตอนมาแล้ว คงพอมองเห็นภาพระำหว่าง Controller และ Task ต่างๆ บ้างแล้วนะครับ ในตอนที่ 2 เราจะมาดูกันถึงการสร้าง XML Installation เพื่อใช้ในการติดตั้งผ่าน Joomla Backend
| ถัดไป >พัฒนาระบบลงทะเบียน Online ตอนที่ 2 |
|---|


