Master & Detail วิธีคัดลอกโค้ดที่ Generate ออกมาแล้วต้องการตัดเอาเฉพาะส่วนของ Detail เพื่อเอาไปรวมกัน
กรณีที่มีการใช้ตารางย่อย หลายตาราง แต่ระบบ PHP CI MANIA สามารถ Generate การบันทึกแบบ Master & Detail ได้เพียงแค่ชุดเดียวต่อครั้ง เราก็จำเป็นจะต้องใช้ชุดแรกเป็นไฟล์หลัก
และ Generate ชุดตารางย่อย Detail อื่นๆ แล้วเอาโค้ดไปรวมกันกับชุดหลักเพื่อใช้งานด้วยกัน
ส่วนของ Model ที่เกี่ยวกับตารางย่อย Detail
- loadDetailList()
- load_detail_record()
- save_detail_list()
- delete_list()
สำหรับส่วนของ Model เราไม่ต้องคัดลอกไปรวมกัน เพียงแค่ตั้งชื่อไฟล์ Model ใหม่ให้สื่อความหมายว่าใช้สำหรับทำอะไร แล้ว Load เข้าไปใน Controller ชุดหลักเพิ่มด้วยเท่านั้น
เช่น
models/Education_model.php สำหรับประวัติการศึกษา
models/Work_model.php สำหรับประวัติการทำงาน
แล้วก็โหลดเข้าไปใช้กับ Controller หลัก
$this->load->model('module_name/Master_model', 'MasterXXX'); $this->load->model('module_name/Education_model', 'EducationYYY');
$this->load->model('module_name/Work_model', 'WorkZZZ');
ส่วนของ Controller ที่เกี่ยวกับตารางย่อย Detail
- save_detail_list()
- edit_list()
- update_list()
- del_list()
- load_detail()
- formValidateDetail()
- formValidateDetailUpdate()
- formValidateDetailWithFile() <-- กรณีมีการอัพโหลดไฟล์ด้วย
- setDetailDataListFormat()
- setPreviewFormatDetail()
ในส่วนของ Controller จะต้องคัดลอกฟังก์ชั่นที่ Generate ชุดใหม่มาวางเพิ่ม และปัญหาก็คือ ชื่อฟังก์ชั่นซ้ำกัน ดังนั้น เพื่อไม่เห็นสับสน ก็เอาชื่อตารางไปต่อท้ายฟังก์ชั่น เช่น save_detail_list_education()
ส่วนของ JavaScript ที่เกี่ยวกับตารางย่อย Detail
- openAddListDialog()
- resetAddFormList()
- saveDetailList()
- confirmDeleteList()
- deleteRecordList()
- previewDetailRecord()
- editDetailRecord()
- loadDetailList()
ส่วนของ JavaScript จะคล้ายกับ Model ครับ คือไม่ต้องเอาไปรวมไฟล์เดียวกัน ให้แยกคนละไฟล์ แล้ว Load เข้าไปในหน้า Controller เดียวกันและเวลาเรียกใช้ก็ผ่านชื่อคลาสของใครของมัน ^^
ซึ่งส่วนของการโหลด JS แอดมินจะวางไว้ที่ __construct()
// ไฟล์ที่ 1
$js_url = 'assets/js_modules/module_name/master.js?ft='. filemtime('assets/js_modules/module_name/master.js');
$this->another_js .= '<script src="'. base_url($js_url) .'"></script>';
// ไฟล์ที่ 2
$js_url = 'assets/js_modules/module_name/education.js?ft='. filemtime('assets/js_modules/module_name/education.js');
$this->another_js .= '<script src="'. base_url($js_url) .'"></script>';
// ไฟล์ที่ 3
$js_url = 'assets/js_modules/module_name/work.js?ft='. filemtime('assets/js_modules/module_name/work.js');
$this->another_js .= '<script src="'. base_url($js_url) .'"></script>';
แต่ก็มีส่วนที่ต้องแก้ไขเพิ่มคือ กรณีชื่อฟิลด์เหมือนกัน ก็จะมีการอ้างอิง INPUT ด้วย ไอดี เดียวกันก็อาจจะเกิดข้อผิดพลาดได้ ก็จำเป็นจะต้องเพิ่มการอ้างถึงอีเลเมนต์ form ของ js ชุดนั้นๆด้วย เช่น
$('#detail_quantity').val('').attr('value','');
ก็อาจจะต้องเปลี่ยนเป็น
$('form#education #detail_quantity').val('').attr('value','');
สรุปส่วนที่จัดการยุ่งยากหน่อยก็คือ
1. Controller จะต้องเอาฟังก์ชั่นมารวมกัน และแก้ไขชื่อฟังก์ชั่นให้ไม่ชนกัน
2. JavaScript จะต้องแก้ไขการอ้างถึงอีเลเมนต์ต่างๆด้วยไอดีที่ซ้ำกัน เพื่อให้ข้อมูลไม่ผิดพลาด
ส่วน Model โหลดเข้ามาก็เรียกใช้ด้วย Class ของใครของมันไม่ต้องแก้ไขอะไรใดๆครับ
PHP CI MANIA - PHP Code Generator
โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ความคิดเห็น
แสดงความคิดเห็น