ข้ามไปที่เนื้อหา

ฟิลด์ที่กำหนดเอง

MRBS 1.12.2 สามารถตรวจพบคอลัมน์เพิ่มเติมในฐานข้อมูลและนำมาใช้เป็นฟิลด์สำหรับการจอง ห้อง และผู้ใช้ ดังนั้นฟิลด์แบบกำหนดเองจึงเป็นส่วนขยายของสคีมา ไม่ใช่การตั้งค่าที่สร้างคอลัมน์ให้โดยอัตโนมัติ

!!! warning “สำรองก่อน”

สำรองฐานข้อมูลและทดสอบการเปลี่ยนแปลงในอินสแตนซ์ที่ไม่ใช่การใช้งานจริง MRBS การอัพเกรดไม่ได้สร้าง ย้าย หรือลบคอลัมน์เฉพาะไซต์

โดยที่ช่องที่กำหนดเองได้รับการสนับสนุน

ตารางฐานข้อมูล วัตถุประสงค์ กฎที่สำคัญ
entry ข้อมูลเพิ่มเติมสำหรับการจองแต่ละรายการ เพิ่มคอลัมน์ที่เหมือนกันไปที่ repeat
repeat ข้อมูลเทมเพลตสำหรับการจองที่เกิดซ้ำ คงชื่อ ประเภท ความยาว ความเป็นโมฆะ และค่าเริ่มต้นให้เหมือนกับ entry
room คุณสมบัติห้องหรือทรัพยากรเพิ่มเติม แสดงและแก้ไขด้วยข้อมูลห้อง
users ข้อมูลโปรไฟล์ผู้ใช้เพิ่มเติม ใช้กับการรับรองความถูกต้องของฐานข้อมูลเท่านั้น

คอลัมน์ entry ที่ไม่มีคอลัมน์ repeat ที่เหมือนกัน ทำให้การดำเนินการจองที่เกิดซ้ำล้มเหลว ถือว่าทั้งคู่เหมือนกับการเปลี่ยนแปลงสคีมาหนึ่งครั้ง

ใช้เฉพาะตัวอักษร ตัวเลข และขีดล่างในชื่อคอลัมน์ เพื่อความเข้ากันได้กับ PostgreSQL ให้เริ่มต้นด้วยตัวอักษรหรือขีดล่าง ต้องการชื่อที่เสถียรและเป็นตัวพิมพ์เล็ก เช่น participant_count หรือ catering

ประเภทฐานข้อมูลที่รองรับ

ประเภท SQL MRBS ควบคุม
TEXT ข้อความหลายบรรทัด
VARCHAR การป้อนข้อความหรือข้อความหลายบรรทัด ขึ้นอยู่กับความยาวสูงสุด
DATE การป้อนวันที่
DECIMAL / NUMERIC การป้อนตัวเลข
INT อินพุตจำนวนเต็ม
SMALLINT / TINYINT ช่องทำเครื่องหมาย ซึ่งแปลเป็นค่าบูลีน

ใช้ SMALLINT สำหรับช่องที่กำหนดเองแบบบูลีนบน PostgreSQL และ TINYINT บน MySQL คอลัมน์ประเภทอื่นๆ ไม่ได้รับการสนับสนุนโดยการจัดการฟิลด์แบบกำหนดเองอัตโนมัติ

เพิ่มฟิลด์ให้กับสคีมา

ตัวอย่างจะถือว่าคำนำหน้าตาราง mrbs_ เริ่มต้น แทนที่หาก $db_tbl_prefix มีค่าอื่น

ช่องการจอง

ตัวอย่างนี้เพิ่มตัวเลือกการจัดเลี้ยงที่เป็นทางเลือก:

ALTER TABLE mrbs_entry
  ADD COLUMN catering VARCHAR(32) DEFAULT NULL;

ALTER TABLE mrbs_repeat
  ADD COLUMN catering VARCHAR(32) DEFAULT NULL;

ทั้งสองคำสั่งใช้ได้กับ MySQL และ PostgreSQL ตรวจสอบคำจำกัดความผลลัพธ์ในทั้งสองตารางก่อนเปิดแบบฟอร์มการจอง

ช่องทำเครื่องหมายห้อง

ALTER TABLE mrbs_room
  ADD COLUMN coffee_machine TINYINT NOT NULL DEFAULT 0;
ALTER TABLE mrbs_room
  ADD COLUMN coffee_machine SMALLINT NOT NULL DEFAULT 0;

ใน MRBS 1.12.2 ค่าเริ่มต้นของฐานข้อมูลจะถูกใช้เมื่อมีการสร้างแถวใหม่ จงใจเลือกค่าเริ่มต้น โดยเฉพาะช่องและช่องทำเครื่องหมายที่บังคับ

มอบป้ายกำกับที่แปลให้กับช่องนี้

หากไม่มีการแทนที่ MRBS จะได้รับป้ายกำกับจากชื่อคอลัมน์ กำหนดหนึ่งป้ายกำกับต่อภาษาที่ใช้งานใน config.inc.php:

$vocab_override['en']['entry.catering'] = 'Catering';
$vocab_override['de']['entry.catering'] = 'Verpflegung';
$vocab_override['fr']['entry.catering'] = 'Restauration';
$vocab_override['es']['entry.catering'] = 'Catering';

สำหรับคู่ entry/repeat ให้กำหนดเฉพาะ entry.catering; ไม่จำเป็นต้องมีโทเค็น repeat.catering ช่องห้องและผู้ใช้ใช้โทเค็น เช่น room.coffee_machine และ users.phone

ดู ข้อความและคำแปล สำหรับการแทนที่คำศัพท์ ไฟล์ภาษา และหน้าความช่วยเหลือที่แปล

เลือกพฤติกรรมการป้อนข้อมูล

ตัวเลือกคงที่

$select_options แทนที่อินพุตว่างด้วยรายการที่เลือก:

$select_options['entry.catering'] = array(
    ''  => 'Please select',
    'c' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch',
);

สำหรับอาร์เรย์ที่เชื่อมโยง MRBS เก็บคีย์ (c) และแสดง ค้นหา และรายงานค่า (Coffee) ซึ่งช่วยให้เปลี่ยนถ้อยคำได้โดยไม่ต้องเขียนข้อมูลที่เก็บไว้ใหม่

หลีกเลี่ยงคีย์ที่มีเฉพาะตัวเลข: PHP แปลงคีย์สตริงที่มีลักษณะคล้ายจำนวนเต็มเป็นจำนวนเต็ม ดังนั้น MRBS อาจตีความอาร์เรย์ที่มีการจัดทำดัชนีไว้ รวมตัวเลือกที่ว่างเปล่าเมื่อการเลือกที่บังคับต้องเริ่มยกเลิกการเลือก

$select_options รองรับสำหรับฟิลด์ entry.name, entry.description, ฟิลด์ entry แบบกำหนดเอง และฟิลด์ users แบบกำหนดเอง คำอธิบายตัวเลือกที่กำหนดค่าไว้เป็นสตริงทั่วทั้งไซต์ ป้ายกำกับฟิลด์สามารถแปลได้ด้วย $vocab_override

ข้อเสนอแนะที่มีการป้อนข้อมูลฟรี

ใช้ $datalist_options สำหรับคำแนะนำในขณะที่ยังคงยอมรับค่าอื่น:

$datalist_options['entry.catering'] = array(
    'Coffee',
    'Sandwiches',
    'Hot lunch',
);

รองรับฟิลด์เดียวกันกับ $select_options เมื่อใช้รายการข้อมูลที่เชื่อมโยง คีย์ที่เก็บไว้อาจทำให้ผู้ใช้ประหลาดใจ ดังนั้นควรทดสอบลักษณะการทำงานก่อนใช้งาน

ฟิลด์บังคับ ส่วนตัว และตรวจสอบแล้ว

ทำให้ช่องบังคับทุกที่:

$is_mandatory_field['entry.catering'] = true;

หรือเฉพาะในพื้นที่ที่มี ID ฐานข้อมูล 1 และ 3:

$is_mandatory_field['entry.catering'] = array(1, 3);

กฎบังคับเฉพาะพื้นที่ใช้กับช่อง entry เท่านั้น ต้องทำเครื่องหมายในช่องบังคับก่อนส่ง

รองรับช่องที่กำหนดเองส่วนตัวสำหรับ entry และ users:

$is_private_field['entry.internal_notes'] = true;
$is_private_field['users.phone'] = true;

สิ่งนี้จะปกป้องค่าเมื่อมีการเปิดใช้งานและกำหนดค่าการจองส่วนตัวเท่านั้น ทดสอบทุกบทบาทที่เกี่ยวข้อง อย่าใช้ความเป็นส่วนตัวของ UI แทนการลดข้อมูลที่ละเอียดอ่อนให้เหลือน้อยที่สุด

ขณะนี้การตรวจสอบความถูกต้องของรูปแบบจำกัดอยู่ที่ช่องข้อความ users ที่กำหนดเอง:

$pattern['users.zip_code'] = '^[0-9]{5}(?:-[0-9]{4})?$';
$vocab_override['en']['users.zip_code.oninvalid'] =
    'Enter a ZIP code such as 12345 or 12345-6789';

ช่องข้อความรายการสามารถแปลตัวยึดตำแหน่งได้:

$vocab_override['en']['entry.catering.placeholder'] =
    'State allergies or special requirements';

รูปแบบฝั่งไคลเอ็นต์ปรับปรุงผลตอบรับ แต่อย่าเปลี่ยนฟิลด์ให้เป็นสถานที่ที่ปลอดภัยสำหรับความลับหรือมาร์กอัปที่ไม่น่าเชื่อถือ

ลำดับฟิลด์ควบคุม

วางช่องการจองอย่างชัดเจนในหน้าสร้างและดู:

$edit_entry_field_order = array(
    'name',
    'catering',
    'description',
);

ฟิลด์ที่ไม่อยู่ในรายการจะถูกผนวกตามลำดับปกติ ฟิลด์ที่กำหนดเองสามารถวางในแบบฟอร์มการค้นหารายงานได้:

$report_search_field_order = array(
    'report_start',
    'report_end',
    'catering',
    'roommatch',
);

ตัวอย่างที่สมบูรณ์

หลังจากเพิ่ม catering ลงในตารางการจองทั้งสองแล้ว:

$vocab_override['en']['entry.catering'] = 'Catering';
$vocab_override['de']['entry.catering'] = 'Verpflegung';
$vocab_override['fr']['entry.catering'] = 'Restauration';
$vocab_override['es']['entry.catering'] = 'Catering';

$select_options['entry.catering'] = array(
    ''  => '—',
    'c' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch',
);

$is_mandatory_field['entry.catering'] = array(1, 3);
$edit_entry_field_order = array('name', 'catering', 'description');
$report_search_field_order = array(
    'report_start',
    'report_end',
    'catering',
);

คำอธิบายตัวเลือกในตัวอย่างนี้ยังคงเหมือนเดิมในทุกภาษาของ UI หากคำบรรยายตัวเลือกที่แปลเป็นสิ่งจำเป็น ให้ออกแบบและทดสอบส่วนขยายเฉพาะไซต์ แทนที่จะสมมติว่า $select_options แปลโดยอัตโนมัติ

เปลี่ยน ลบ และอัปเกรด

ก่อนที่จะย่อคอลัมน์หรือเปลี่ยนประเภท ให้ตรวจสอบค่าที่มีอยู่และทดสอบการแปลง ก่อนที่จะลบฟิลด์ ให้ลบการอ้างอิงการกำหนดค่า ปรับใช้การเปลี่ยนแปลงนั้น ยืนยันว่าแอปพลิเคชันทำงาน จากนั้นปล่อยคอลัมน์ผ่านกระบวนการเปลี่ยนแปลงฐานข้อมูลปกติเท่านั้น สำหรับช่องการจอง ให้เปลี่ยนทั้ง entry และ repeat

บันทึกทุกคอลัมน์ที่กำหนดเองในเอกสารประกอบการดำเนินงานของไซต์ และตรวจสอบอีกครั้งหลังจากอัปเกรด MRBS แต่ละครั้ง สคริปต์สคีมามาตรฐาน MRBS ไม่ได้เป็นเจ้าของคอลัมน์เหล่านี้

รายการตรวจสอบการยืนยัน

  • คำจำกัดความ entry และ repeat จะเหมือนกันในทุกฟิลด์การจอง
  • การสร้าง แก้ไข ดู คัดลอก และลบงานการจอง
  • สามารถแก้ไขซีรีส์ที่เกิดซ้ำและรายการหนึ่งรายการได้อย่างถูกต้อง
  • ค่าเริ่มต้นของฐานข้อมูลจะถูกนำไปใช้กับบันทึกใหม่
  • พฤติกรรมที่จำเป็น ส่วนตัว เลือก รายการข้อมูล และการตรวจสอบทำงานตามบทบาทและพื้นที่
  • ป้ายกำกับจะปรากฏในทุกภาษาที่กำหนดค่าไว้
  • การค้นหา รายงาน อีเมล การส่งออกปฏิทิน และการนำเข้า/ส่งออกจะแสดงค่าที่ปลอดภัย
  • การดูแลห้องและผู้ใช้จะแสดงเฉพาะฟิลด์ที่ต้องการเท่านั้น
  • ขั้นตอนการสำรองและกู้คืนรวมถึงสคีมาแบบขยาย