สำหรับการทำงานของโค้ดในตัวอย่างนี้ จะสามารถนำไปใช้ได้กับการเปลี่ยนแปลงรายการตัวเลือกใน Drop-down List ทุกตัวที่ต้องการให้มีผลกับ Drop-down List ตัวอื่นๆ เช่น
1. ในตัวอย่างนี้ เมื่อเลือกภาค ก็จะแสดงรายชื่อจังหวัด หรือ
2. นำไปดัดแปลงเป็น เมื่อเลือกจังหวัด ก็แสดงรายชื่อ อำเภอ หรือ
3. เมื่อเลือกอำเภอ ก็จะแสดงรายชื่อตำบล
หรือการเลือกตัวเลือกของข้อมูลต่างๆที่มีลำดับชั้น เช่น แผนก ฝ่าย เป็นต้น
ลำดับขั้นตอนการแก้ไขโค้ดหลังจากที่เราใช้ PHP CI MANIA ทำการ Generate ไฟล์หน้าเว็บออกมาเรียบร้อยแล้ว ให้แก้ส่วนต่างๆดังนี้
1. เพิ่ม action ใน javascript เพื่อส่ง AJAX ไปดึงข้อมูลจาก...
2. Controller เขียนฟังก์ชั่นเรียกข้อมูลจากตารางที่ต้องการ เช่น ส่งไอดีภาค เข้ามาก็ไปดึง ข้อมูลจังหวัดที่ตรงกับไอดีภาคนั้นๆ โดยเรียกจาก...
3. Model ซึ่งจะกำดึงข้อมูลตามเงื่อนไขโดยอ้างอิงฟังก์ชั่นใน MY_Model ก็จะไม่ได้เขียนอะไรมากเท่าไหร่ แค่ระบุชื่อตารางให้ตรงก็พอ
1. สร้าง Action ให้ทำงานเมื่อ <select> ของภาคเปลี่ยนแปลง ก่อนอื่นให้ตรวจสอบ id ที่ต้องการ
2. เมื่อได้ id ของ <select> ภาค มาแล้วก็เปิดไฟล์ JavaScript ที่เมื่อ Generate โค้ดออกมาจะอยู่ที่โฟลเดอร์ assets/js_modules/ตามด้วยชื่อที่ตั้งไว้ เขียนดักจับเหตุการณ์เมื่อเกิด On Change ให้เรียกใช้งานฟังก์ชั่น getProvinceOptionList(this.value) **หมายเหตุในภาพไม่ได้แก้ไข this.value**
3. ในคลาส AddressList ให้เพิ่มฟังก์ชั่น getProvinceOptionList() เข้าไป ซึ่งจะทำการส่งค่า geo_id ซึ่งเป็นไอดีของ ภาค ไปยังหน้าเว็บ (Controller) Address_list ฟังก์ชั่น get_province_list()
4. สร้างฟังก์ชั่น get_province_list() ไว้ในคอนโทรลเลอร์ Address_list โดยจะทำการส่ง geo_id ไปที่ Model เพื่อดึงข้อมูลจังหวัดตามไอดีภาคใน Address_list_model ฟังก์ชั่น province_list($geo_id)
5. สร้างฟังก์ชั่น province_list() ในไฟล์โมเดล Address_list_model เพื่อดึงข้อมูลที่ต้องการโดยมีคำสั่งดังนี้
$this->set_table_name() ระบุชื่อตารางที่ต้องการดึงข้อมูล
$this->set_select_field() เลือกฟิลด์ที่ต้องการ
$this->set_where() กำหนดเงื่อนไขที่ใช้ดึงข้อมูล
$this->set_order_by() กำหนดการจัดเรียงข้อมูล
$this->list_record() ดึงข้อมูลออกมาในรูปแบบ Array
6. ส่วนที่ต้องเพิ่มเติมขึ้นมาคือ การสร้างไฟล์ View สำหรับแสดง option list จากข้อมูล Array ที่ได้มา ซึ่งปกติ เราจะคุ้นชินกับการ echo '<option></option>'; แต่เนื่องจากไม่ต้องการให้มี HTML อยู่รวมใน View หรือไม่อยากให้ PHP ปนกับ HTML ผู้เขียนจึงได้ทำการแยกออกจากกัน
7. ทดสอบการทำงาน จะได้ผลลัพธ์ดังในรูป
สรุปแล้ว เราจะแก้ไขไฟล์อยู่ด้วยกันทั้งหมด 3 ไฟล์ และสร้างใหม่ 1 ไฟล์
สำหรับไฟล์ซอร์สโค้ดตัวอย่าง สามารถเข้าไปดาวน์โหลดได้ ที่นี่
ดูวิดีโอเพิ่มเติมได้ที่ >> CodeIgniter : PHP CI MANIA
1. ในตัวอย่างนี้ เมื่อเลือกภาค ก็จะแสดงรายชื่อจังหวัด หรือ
2. นำไปดัดแปลงเป็น เมื่อเลือกจังหวัด ก็แสดงรายชื่อ อำเภอ หรือ
3. เมื่อเลือกอำเภอ ก็จะแสดงรายชื่อตำบล
หรือการเลือกตัวเลือกของข้อมูลต่างๆที่มีลำดับชั้น เช่น แผนก ฝ่าย เป็นต้น
ลำดับขั้นตอนการแก้ไขโค้ดหลังจากที่เราใช้ PHP CI MANIA ทำการ Generate ไฟล์หน้าเว็บออกมาเรียบร้อยแล้ว ให้แก้ส่วนต่างๆดังนี้
1. เพิ่ม action ใน javascript เพื่อส่ง AJAX ไปดึงข้อมูลจาก...
2. Controller เขียนฟังก์ชั่นเรียกข้อมูลจากตารางที่ต้องการ เช่น ส่งไอดีภาค เข้ามาก็ไปดึง ข้อมูลจังหวัดที่ตรงกับไอดีภาคนั้นๆ โดยเรียกจาก...
3. Model ซึ่งจะกำดึงข้อมูลตามเงื่อนไขโดยอ้างอิงฟังก์ชั่นใน MY_Model ก็จะไม่ได้เขียนอะไรมากเท่าไหร่ แค่ระบุชื่อตารางให้ตรงก็พอ
1. สร้าง Action ให้ทำงานเมื่อ <select> ของภาคเปลี่ยนแปลง ก่อนอื่นให้ตรวจสอบ id ที่ต้องการ
2. เมื่อได้ id ของ <select> ภาค มาแล้วก็เปิดไฟล์ JavaScript ที่เมื่อ Generate โค้ดออกมาจะอยู่ที่โฟลเดอร์ assets/js_modules/ตามด้วยชื่อที่ตั้งไว้ เขียนดักจับเหตุการณ์เมื่อเกิด On Change ให้เรียกใช้งานฟังก์ชั่น getProvinceOptionList(this.value) **หมายเหตุในภาพไม่ได้แก้ไข this.value**
3. ในคลาส AddressList ให้เพิ่มฟังก์ชั่น getProvinceOptionList() เข้าไป ซึ่งจะทำการส่งค่า geo_id ซึ่งเป็นไอดีของ ภาค ไปยังหน้าเว็บ (Controller) Address_list ฟังก์ชั่น get_province_list()
4. สร้างฟังก์ชั่น get_province_list() ไว้ในคอนโทรลเลอร์ Address_list โดยจะทำการส่ง geo_id ไปที่ Model เพื่อดึงข้อมูลจังหวัดตามไอดีภาคใน Address_list_model ฟังก์ชั่น province_list($geo_id)
5. สร้างฟังก์ชั่น province_list() ในไฟล์โมเดล Address_list_model เพื่อดึงข้อมูลที่ต้องการโดยมีคำสั่งดังนี้
$this->set_table_name() ระบุชื่อตารางที่ต้องการดึงข้อมูล
$this->set_select_field() เลือกฟิลด์ที่ต้องการ
$this->set_where() กำหนดเงื่อนไขที่ใช้ดึงข้อมูล
$this->set_order_by() กำหนดการจัดเรียงข้อมูล
$this->list_record() ดึงข้อมูลออกมาในรูปแบบ Array
6. ส่วนที่ต้องเพิ่มเติมขึ้นมาคือ การสร้างไฟล์ View สำหรับแสดง option list จากข้อมูล Array ที่ได้มา ซึ่งปกติ เราจะคุ้นชินกับการ echo '<option></option>'; แต่เนื่องจากไม่ต้องการให้มี HTML อยู่รวมใน View หรือไม่อยากให้ PHP ปนกับ HTML ผู้เขียนจึงได้ทำการแยกออกจากกัน
ข้อสังเกต parser-repeat="[province_list]" ในวงเล็บ province_list จะต้องตรงกับคีย์ของ data ใน Controller ที่เราใช้รับค่าจาก Model นั่นคือ $data['province_list'] = $list;
และ {PROVINCE_ID} และ {PROVINCE_NAME} ก็คือฟิลด์ที่เรา set_select_field() ในข้อ 5 นั่นเอง
7. ทดสอบการทำงาน จะได้ผลลัพธ์ดังในรูป
สรุปแล้ว เราจะแก้ไขไฟล์อยู่ด้วยกันทั้งหมด 3 ไฟล์ และสร้างใหม่ 1 ไฟล์
สำหรับไฟล์ซอร์สโค้ดตัวอย่าง สามารถเข้าไปดาวน์โหลดได้ ที่นี่
ดูวิดีโอเพิ่มเติมได้ที่ >> CodeIgniter : PHP CI MANIA
ความคิดเห็น
แสดงความคิดเห็น