ข้อมูลอ้างอิงโมเดลและฟิลด์
โมเดลกำหนดโครงสร้างเนื้อหาของเว็บไซต์ key ของฟิลด์เป็นตัวระบุใน API ส่วน label เป็นชื่อที่แสดง เมื่อแก้ไขนิยามให้คง ID ฟิลด์เดิมไว้ การเปลี่ยนตัวตนของฟิลด์ไม่ใช่การเปลี่ยนชื่ออย่างปลอดภัย การเปลี่ยน label ไม่เปลี่ยน key เลย ฟิลด์ใหม่ได้ key จาก label จนกว่าคุณจะพิมพ์เอง key ที่มีอยู่แล้วเปลี่ยนได้ทาง คีย์ของช่อง เท่านั้น โดย ID ฟิลด์คงเดิม และการเปลี่ยนชื่อจะถูกตรวจก่อนบันทึก ใช้การเปลี่ยนโมเดลหลังตรวจผลความเข้ากันได้แล้วเท่านั้น
หากโหลดโมเดลที่มีอยู่ไม่สำเร็จ ให้กด ลองอีกครั้ง จะเริ่มแก้ไขได้เมื่อโหลดนิยามแล้ว ระหว่างตรวจความเข้ากันได้และบันทึก จะยังแก้ไขไม่ได้
ชนิดฟิลด์
หัวข้อที่มีชื่อว่า “ชนิดฟิลด์”| ชนิด | การตั้งค่าที่ควรตรวจ |
|---|---|
text |
บรรทัดเดียวหรือหลายบรรทัด จำนวนแถว ข้อความตัวอย่าง ค่าเริ่มต้น รวมถึงความยาวและรูปแบบ |
rich |
ตัวแก้ไขข้อความแบบจัดรูปแบบที่ตั้งค่าแถบเครื่องมือได้ เก็บ rich document หนึ่งฉบับเป็น HTML แบบ canonical ไม่เกิน 256 KiB: บล็อกข้อความ ตาราง แกลเลอรีรูปภาพ บล็อกเสียง วิดีโอ และไฟล์ และการฝังลิงก์ YouTube, Vimeo หรือ https ที่อนุญาต (origin ของการฝัง) การบันทึกที่มีสิ่งอื่นจะถูกปฏิเสธ โดยระบุฟิลด์ ภาษา และองค์ประกอบ public API ให้บริการ HTML ที่ตรวจแล้ว ให้แสดงผลด้วย renderRichDocument ของ ข้อกำหนดข้อมูลหน้า เหมือนที่ตัวแสดงผลของ Dee Wan เองทำกับโพสต์ของ Blog และสรุปของ Latest entries (เว็บไซต์ Blog) |
number |
ขั้นการเพิ่มลด ค่าเริ่มต้น รูปแบบ integer, decimal, currency หรือ percentage และขอบเขตตัวเลข |
boolean |
ค่า boolean เริ่มต้นที่ระบุได้ |
select |
ต้องมีรายการตัวเลือกแบบข้อความหรือ {value, label} เลือกหนึ่งหรือหลายค่าและกำหนดค่าเริ่มต้นได้ การกรอกค่าเองรองรับเฉพาะแบบเลือกหนึ่งค่า |
date |
รูปแบบ date, datetime หรือ time ค่าเริ่มต้นและขอบเขตวันที่ ไม่มีชนิดฟิลด์ datetime แยกต่างหาก |
point |
เก็บละติจูดและลองจิจูดคู่กัน ดูวันที่พร้อมเขตเวลาและพิกัด |
media |
ประเภทไฟล์ (image, document, audio, video, file เป็นภาพเมื่อไม่ได้เลือก) ขนาดสูงสุดเป็นไบต์ ไฟล์เดียวหรือหลายไฟล์ และกฎการครอป (อัตราส่วนภาพ ขนาดต่ำสุด) การบันทึกที่วางไฟล์ประเภทอื่นจะถูกปฏิเสธ (media_kind_not_accepted) และไฟล์ที่ใหญ่เกินขนาดสูงสุดก็เช่นกัน (media_too_large_for_field) จัดเฟรมได้เฉพาะภาพ: การครอปหรือจุดโฟกัสบนไฟล์อื่นจะถูกปฏิเสธ (media_framing_not_image) ในฟิลด์ media ระดับบนสุด ผู้แก้ไขกำหนดจุดโฟกัสได้ทีละภาพ เมื่อมีกฎอัตราส่วน การครอปจะตามจุดนั้น การจัดเฟรมเก็บไว้ข้างการอ้างอิงเป็นสัดส่วนของภาพ และไม่เปลี่ยนไฟล์ ไม่มีส่วนใดย่อขนาดหรือครอปไบต์ที่เก็บไว้ ไซต์ที่ generate แล้วส่งสำเนาที่ย่อขนาดและครอปแล้วได้ (ดู preview และ client) ภาพหนึ่งภาพมีจุดโฟกัสเริ่มต้นได้ (Media center → Edit image) ค่านี้ใช้เป็นจุดเริ่มของการใช้ภาพครั้งใหม่เท่านั้น การใช้ที่มีอยู่แล้วเก็บการจัดเฟรมของตัวเองไว้ สำเนาไซต์ส่งค่านี้ไปด้วย ภายในคอมโพเนนต์ การจัดเฟรมอยู่ในค่าเอง: การใช้ที่จัดเฟรมแล้วคือ { media_id, crop?, focal? } ส่วนการใช้ที่ไม่จัดเฟรมยังเป็น id เปล่า ภาพในส่วนของหน้าจัดเฟรมได้ทีละช่องใน page inspector (ข้อกำหนดข้อมูลหน้า เวอร์ชัน 4) ประเภทและรูปแบบไฟล์ที่คลังสื่อรับได้เป็นการตั้งค่าของไซต์ (การตั้งค่า → เว็บไซต์ → ไฟล์สื่อ) รูปภาพครอปและหมุนเป็นสำเนาใหม่ได้ (Media center → Edit → Crop and rotate) จุดที่ใช้ภาพต้นฉบับไม่เปลี่ยน |
json |
JSON ทั่วไป อาร์เรย์ หรืออ็อบเจกต์ พร้อมข้อความ JSON Schema ที่กำหนดเพิ่มเติมได้ เอกสาร slides ของหน้ามีข้อกำหนดข้อมูลหน้าเพิ่มด้วย |
relation |
slug โมเดลเป้าหมาย (หลายโมเดล: ดู ความสัมพันธ์กับหลายโมเดล) ฟิลด์ที่ใช้แสดง และจำนวนความสัมพันธ์: หนึ่งต่อหนึ่ง หลายต่อหนึ่ง หนึ่งต่อหลาย หรือหลายต่อหลาย ในแบบหนึ่งต่อหนึ่งและหนึ่งต่อหลาย แต่ละรายการที่ลิงก์เป็นของรายการเดียวเท่านั้น รายการอื่นที่ชี้ไปยังรายการนั้นในฟิลด์เดียวกันถูกปฏิเสธด้วย relation_target_taken ทุกรายการที่ถูกลิงก์แสดงรายการที่ชี้มาหาใน เชื่อมโยงจาก แยกตามโมเดลและฟิลด์ต้นทาง ครบทั้งสี่ชนิด เอดิเตอร์ที่อ่านรายการนั้นได้และแก้ไขต้นทางได้สามารถเพิ่มรายการให้ต้นทางหรือนำออกได้ การเปลี่ยนนี้คือการบันทึกของต้นทางเอง เป็นเวอร์ชันร่างใหม่ของต้นทาง ขึ้นเว็บหลังต้นทางเผยแพร่ และมีผลกับทุกภาษา เมื่อต้นทางแบบหนึ่งต่อหนึ่งหรือหลายต่อหนึ่งชี้ไปรายการอื่นอยู่แล้ว เอดิเตอร์ต้องยืนยันการแทนที่ที่ระบุทั้งสองรายการก่อน การเปลี่ยนฟิลด์ที่มีอยู่เป็นหนึ่งต่อหนึ่งหรือหนึ่งต่อหลายถูกบล็อกขณะที่สองรายการใช้เป้าหมายเดียวกัน (relation_targets_shared) ฟิลด์ของ component ไม่มีตัวเลือกหนึ่งต่อหลาย การลบรายการฝั่งใดฝั่งหนึ่งจะลบลิงก์และเก็บรายการอีกฝั่งไว้ ความสัมพันธ์ปกติอยู่ในเว็บไซต์เดียวกัน การอ้างอิงร่วม ใช้ได้เฉพาะฟิลด์ความสัมพันธ์ของโมเดล ฟิลด์ของ component เปิดใช้ไม่ได้ (shared_reference_component_unavailable) ฟิลด์หลายต่อหนึ่งหรือหลายต่อหลายที่ไม่ใช่ลำดับชั้นเปิดรับการอ้างอิงร่วมแบบชัดเจนได้ (sharedReferences: true) เมื่อผู้ดูแลทั้งต้นทางและปลายทางอนุญาต โดยอ่านเฉพาะรายการสาธารณะที่เผยแพร่แล้วและไม่ให้สิทธิ์แก้ไขเว็บไซต์ต้นทาง ฟิลด์อ้างอิงร่วมใช้ตัวกรองตัวเลือกตามบริบทไม่ได้ (shared_reference_choice_unavailable) ความสัมพันธ์แบบหนึ่งต่อหนึ่งหรือหลายต่อหนึ่งที่ชี้ไปยังโมเดลของตัวเองสามารถทำเครื่องหมาย ลำดับชั้น (แม่/ลูก) ("hierarchical": true) ได้ เมื่อทำแล้ว การบันทึกหรือการกู้คืนที่ทำให้รายการเป็นพาเรนต์ของตัวเอง หรือย้ายรายการไปอยู่ใต้รายการลูกของตัวเอง จะถูกปฏิเสธด้วย relation_hierarchy_cycle เปิดใช้ไม่ได้ขณะที่ลิงก์ที่บันทึกไว้วนกลับเป็นวงอยู่แล้ว การบันทึกโมเดลจะแสดงรายการเหล่านั้น API ที่สร้างขึ้นปฏิเสธการวนเป็นวงแบบเดียวกันด้วยรหัสเดียวกัน รวมถึงภายในการเขียนฐานข้อมูล (ดู การเขียนความสัมพันธ์และคำแปล) |
component |
คอมโพเนนต์ที่อนุญาต (components: slug เดียว หรือหลาย slug สำหรับรายการบล็อกแบบผสม) การทำซ้ำ การพับ และการแสดงผลเฉพาะจุดใช้งาน นิยามของเว็บไซต์สามารถแทนนิยามร่วมได้โดยยืนยันอย่างชัดเจน ดูฟิลด์คอมโพเนนต์แบบผสม |
ข้อความสำเร็จรูปของ rich text
หัวข้อที่มีชื่อว่า “ข้อความสำเร็จรูปของ rich text”ในฟิลด์ rich text ของรายการ ให้เลือกข้อความแล้วเลือก ข้อความสำเร็จรูป → บันทึกส่วนที่เลือกเป็นข้อความสำเร็จรูป เพื่อเก็บไว้ภายใต้ชื่อหนึ่ง ข้อความสำเร็จรูป → แทรกข้อความสำเร็จรูป ค้นหาข้อความสำเร็จรูปของเว็บไซต์และแทรกที่ตำแหน่งเคอร์เซอร์ การแทรกเป็นการคัดลอก: การเปลี่ยนชื่อ แก้ไข หรือลบข้อความสำเร็จรูปในภายหลังจะไม่เปลี่ยนข้อความที่แทรกไปแล้ว
ผู้ที่สร้างหรือแก้ไขรายการของโมเดลได้จะใช้ข้อความสำเร็จรูปในฟิลด์ rich text ของโมเดลนั้นได้ คุณเปลี่ยนชื่อ แทนที่ หรือลบข้อความสำเร็จรูปที่คุณบันทึกเองได้ ผู้ที่มี site:settings จัดการได้ทั้งหมด เว็บไซต์หนึ่งเก็บข้อความสำเร็จรูปได้ไม่เกิน 200 รายการ แต่ละรายการไม่เกิน 64 KiB ชื่อยาว 1 ถึง 80 ตัวอักษรและไม่ซ้ำกันในเว็บไซต์โดยไม่สนตัวพิมพ์เล็กใหญ่ ข้อความสำเร็จรูปเก็บได้เฉพาะสิ่งที่ฟิลด์ rich text รับ HTML ดิบ สไตล์ และสคริปต์จะถูกปฏิเสธ ข้อความสำเร็จรูปเป็นข้อมูลส่วนตัว: ไม่ปรากฏใน API สาธารณะหรือบนเว็บไซต์เลย
สำเนาเว็บไซต์ (รูปแบบ 1.12) นำข้อความสำเร็จรูปและรูปภาพที่ข้อความเหล่านั้นแสดงไปด้วย การเลิกทำการนำเข้าจะลบเฉพาะข้อความสำเร็จรูปที่การนำเข้าเพิ่มและยังไม่มีใครแก้ไข รายการที่ถูกแก้ไขแล้วจะถูกเก็บไว้และแสดงในรายการ
การตั้งค่าฟิลด์ร่วม
หัวข้อที่มีชื่อว่า “การตั้งค่าฟิลด์ร่วม”เลือกการบังคับกรอกและการแปลอย่างตั้งใจ การตรวจสอบรองรับความยาวและรูปแบบข้อความ ช่วงตัวเลข จำนวนตัวเลือก จำนวนคอมโพเนนต์ซ้ำ และช่วงวันที่ ระบบปฏิเสธค่าต่ำสุดที่สูงกว่าค่าสูงสุด และรูปแบบที่คอมไพล์ไม่ได้ เมื่อบันทึกโมเดล เซิร์ฟเวอร์ตรวจการบันทึกเนื้อหาด้วยกฎเดียวกับตัวแก้ไข การตั้งค่า UI มีการซ่อน จัดกลุ่ม ลำดับ และข้อความช่วยเหลือ การซ่อนฟิลด์ไม่ใช่นโยบายสิทธิ์เข้าถึง รูปแบบรองรับคุณสมบัติ Unicode เช่น \p{L} สำหรับตัวอักษร และ \p{N} สำหรับตัวเลข รูปแบบที่ผู้ใช้กำหนดให้รับเฉพาะ ASCII ยังคงใช้ข้อจำกัดเดิม
API แบ็กเอนด์อิสระที่สร้างขึ้นใช้กฎข้อความ minLength, maxLength และ pattern ตามที่กำหนดไว้ รวมถึงคุณสมบัติ Unicode และรูปแบบที่ตั้งใจจำกัดให้รับเฉพาะ ASCII เมื่อเปลี่ยนกฎเหล่านี้ ต้องสร้างและดีพลอยแบ็กเอนด์ใหม่ ดูข้อผิดพลาดที่ทำให้สร้างไม่ได้ในเอกสารอ้างอิง API
แสดงเฉพาะเมื่อ
หัวข้อที่มีชื่อว่า “แสดงเฉพาะเมื่อ”ช่องโมเดลหรือคอมโพเนนต์ขึ้นกับช่องใช่/ไม่ใช่ ตัวเลือก ข้อความ ตัวเลข หรือวันที่ที่อยู่ระดับเดียวกันได้ ใน ส่วนติดต่อ เปิด แสดงเฉพาะเมื่อ… แล้วเลือกช่อง การเปรียบเทียบ และค่า รวมได้สูงสุดสี่เงื่อนไขด้วย ทุกเงื่อนไข (AND) หรือ เงื่อนไขใดเงื่อนไขหนึ่ง (OR) และซ้อนกลุ่มได้สามระดับ รูปแบบเดิม { "field": "featured", "in": [true] } ยังใช้ได้ การเปรียบเทียบระบุชนิดใช้ { "field": "price", "op": "gte", "values": ["100"] } กลุ่มใช้ { "all": [...] } หรือ { "any": [...] } ข้อความตรวจเท่ากันหรือมีข้อความ ตัวเลขและวันตามปฏิทินตรวจเท่ากันหรือช่วงค่า การตรวจว่างไม่รับค่า ระบบปฏิเสธช่องที่ไม่มี ค่าหรือการเปรียบเทียบผิดชนิด ตัวเลือกที่ไม่มี และวงจรก่อนบันทึกโครงสร้าง ค่าที่ซ่อนยังเก็บไว้ บังคับกรอกและตรวจค่าเฉพาะเมื่อช่องแสดง นี่คือการแสดงผล ไม่ใช่สิทธิ์เข้าถึง ตัวแก้ไข API เครื่องมือจัดการ และการตรวจนำเข้าใช้ตัวอ่านเดียวกัน สำเนาไซต์เก็บเงื่อนไขไว้
โมเดล ภาษา และหน้าเว็บ
หัวข้อที่มีชื่อว่า “โมเดล ภาษา และหน้าเว็บ”เว็บไซต์เลือกภาษา ภาษาหลัก และนโยบาย strict หรือ fallback ภายใต้ fallback แต่ละภาษากำหนดภาษาสำรองตามลำดับได้ที่ การตั้งค่า → ภาษา ผู้เข้าชมจะเห็นภาษาแรกที่มีรายการนั้น แล้วจึงเป็นภาษาหลัก ตัวแก้ไขรายการแสดงว่าผู้เข้าชมเห็นภาษาใดระหว่างที่คำแปลยังไม่เผยแพร่ ตรวจภาษาของรายการที่ตอบกลับ อย่าสมมติว่าตรงกับภาษาที่ขอ โมเดลส่วนตัวต้องมีสิทธิ์ API ที่เหมาะสม การย้ายเนื้อหาเข้าโมเดลสาธารณะทำให้ผู้อ่านสาธารณะเข้าถึงได้
โมเดลหน้าที่ระบบสร้างต้องมีโครงสร้าง title และ slides ตามเอกสาร ดู ข้อกำหนดข้อมูลหน้า โมเดลอื่นเป็นข้อมูล API ไม่ได้สร้างหน้าให้โดยอัตโนมัติ slug คอมโพเนนต์ร่วมเป็นค่าคงที่ การแยกคอมโพเนนต์สำหรับเว็บไซต์จะแทนนิยามร่วมเฉพาะการอ้างอิงของเว็บไซต์นั้น
เมื่อเปลี่ยนรายการช่องของคอมโพเนนต์ ระบบเก็บโครงสร้างเดิมให้อัตโนมัติ รายการเดิมยังเก็บค่าและเวอร์ชันโครงสร้างไว้ การเปลี่ยนนี้ไม่สร้างเวอร์ชันเนื้อหาและไม่เผยแพร่สิ่งใด อินสแตนซ์ใหม่ใช้โครงสร้างใหม่ เมื่อต้องการย้ายอินสแตนซ์เดิมให้กด อัปเดตคอมโพเนนต์ ระหว่างเปลี่ยนโครงสร้าง การเขียนเนื้อหาพร้อมกันอาจถูกปฏิเสธด้วย component_migration_in_progress ให้ลองบันทึกอีกครั้งหลังเสร็จ
เวอร์ชันโครงสร้างคอมโพเนนต์
หัวข้อที่มีชื่อว่า “เวอร์ชันโครงสร้างคอมโพเนนต์”ในตัวแก้ไขคอมโพเนนต์ เปิด เลิกใช้ เพื่อไม่ให้เพิ่มหรือทำสำเนาประเภทนี้ รายการเดิมยังอ่านและแก้ไขได้โดยไม่ลบข้อมูล หากจะนำประเภทออกจากรายการที่ฟิลด์แบบผสมอนุญาต ต้องย้ายหรือลบรายการที่ใช้อยู่ก่อน
ระบบเก็บโครงสร้างเดิมให้อัตโนมัติทุกครั้งที่เปลี่ยนรายการช่อง รายการธรรมดาและแบบผสมที่มีอยู่เก็บช่องและเวอร์ชันเดิม ส่วนรายการใหม่ใช้เวอร์ชันล่าสุด กด อัปเดตคอมโพเนนต์ เพื่อเปลี่ยนหลังยืนยัน ช่องที่ชื่อและชนิดเหมือนเดิมเก็บค่าไว้ ช่องที่ลบหรือเปลี่ยนชนิดจะทิ้งค่า ช่องใหม่ใช้ค่าเริ่มต้น ตรวจแล้วบันทึกรายการ และเผยแพร่เมื่อพร้อม
เก็บโครงสร้างเดิมได้สูงสุด 64 เวอร์ชัน รวม JSON ไม่เกิน 2 MiB ช่องปัจจุบัน โครงสร้างเดิม และเมทาดาทารวมกันต้องพอดีกับหนึ่งแถว ไม่เกิน 1,900,000 ไบต์ UTF-8 รวมพื้นที่เผื่อของระบบ หากเกินขีดจำกัดใด ระบบปฏิเสธการบันทึกหรือนำเข้าด้วย component_retention_limit ก่อนเขียนคอมโพเนนต์ ขณะเปลี่ยน ระบบพักการเขียนข้อมูลที่ใช้คอมโพเนนต์ด้วยกลไกเดียวกับการลบช่อง คอมโพเนนต์ร่วมในการติดตั้งที่แยกฐานข้อมูลต่อไซต์ยังไม่รองรับการเปลี่ยนข้ามฐานข้อมูลครั้งเดียว สำเนาไซต์และแอปที่สร้างเก็บสถานะเลิกใช้ โครงสร้างเดิม และเวอร์ชันของแต่ละรายการ การบันทึกโครงสร้างคอมโพเนนต์ไม่ลบโครงสร้างเดิมที่เก็บไว้
ฟิลด์คอมโพเนนต์แบบผสม
หัวข้อที่มีชื่อว่า “ฟิลด์คอมโพเนนต์แบบผสม”ฟิลด์คอมโพเนนต์ที่อนุญาตหลายคอมโพเนนต์คือรายการบล็อกแบบผสม คล้าย dynamic zone ในส่วน การตั้งค่า ของฟิลด์ เลือกแต่ละคอมโพเนนต์ที่อนุญาต ลำดับที่คุณเลือกคือลำดับที่เสนอให้ผู้แก้ไข ตั้งแต่สองคอมโพเนนต์ขึ้นไปทำให้ฟิลด์เป็นรายการ จึงทำซ้ำได้เสมอ (มิฉะนั้นได้ mixed_component_not_list) แต่ละคอมโพเนนต์อนุญาตได้ครั้งเดียว
- การตั้งค่าคือ
{ "type": "component", "components": ["hero", "quote"], "repeatable": true }ฟิลด์ที่อนุญาตคอมโพเนนต์เดียวใช้คีย์เดียวกัน:"components": ["seo"] - ค่าที่เก็บเป็นรายการที่มีลำดับ แต่ละบล็อกมี
_id(ตัวตนของบล็อก)_component(คอมโพเนนต์ของบล็อก)_version(เวอร์ชันของคอมโพเนนต์นั้นที่ใช้บันทึกครั้งล่าสุด)enabled(falseซ่อนบล็อก) และฟิลด์ของคอมโพเนนต์ การบันทึกตรวจแต่ละบล็อกตามเวอร์ชันโครงสร้างที่บล็อกใช้อยู่ หากเก็บโครงสร้างเดิมไว้ เวอร์ชันจะเปลี่ยนเมื่อสั่งอัปเกรดคอมโพเนนต์เท่านั้น - เวอร์ชันของคอมโพเนนต์เริ่มที่ 1 และเพิ่มทีละหนึ่งทุกครั้งที่รายการฟิลด์ของคอมโพเนนต์เปลี่ยน อินสแตนซ์เดิมเก็บโครงสร้างและ
_versionไว้จนกว่าจะสั่งอัปเดต - ในตัวแก้ไข เพิ่มบล็อก เสนอคอมโพเนนต์ที่อนุญาต เมนู ⋯ ของแต่ละบล็อกมี เลื่อนขึ้น, เลื่อนลง, ทำสำเนา, ซ่อน หรือ แสดง และ ลบ ลากที่จับ หรือโฟกัสที่จับแล้วกดปุ่มลูกศร เพื่อเรียงลำดับใหม่
- บล็อกที่ซ่อนยังอยู่ในรายการที่เก็บด้วย
enabled: falseสำหรับผู้แก้ไข ประวัติ และสำเนา การอ่านสาธารณะ managed renderer เว็บไซต์ที่สร้าง และคำตอบแบบ anonymous และ read token ของแบ็กเอนด์ที่สร้าง จะไม่รวมบล็อกนี้enabledของ A/B variant ในฟิลด์คอมโพเนนต์เดียวไม่ได้รับผลกระทบ - การเพิ่มคอมโพเนนต์ในรายการที่อนุญาตปลอดภัยเสมอ การลบคอมโพเนนต์ถูกปฏิเสธขณะที่รายการที่เก็บไว้ยังมีบล็อกของคอมโพเนนต์นั้น (
component_type_removed) - การอนุญาตคอมโพเนนต์ที่สองในฟิลด์คอมโพเนนต์เดียวจะแปลงค่าที่เก็บไว้เป็นบล็อก (
_idblock-1,block-2, … คอมโพเนนต์ เวอร์ชันปัจจุบันของคอมโพเนนต์ และแสดงอยู่) การกลับไปใช้คอมโพเนนต์เดียวที่เหลือจะแปลงบล็อกกลับเป็นอินสแตนซ์ แต่ละรายการได้เวอร์ชันปัจจุบันใหม่ที่มีป้าย “Component field changed shape” เวอร์ชันเก่าคงรูปแบบเดิม การกลับไปเป็นฟิลด์ที่เก็บอินสแตนซ์เดียวถูกปฏิเสธขณะที่รายการใดมีมากกว่าหนึ่งบล็อก (storage_shape_changed) การแปลงถูกปฏิเสธเมื่อจะต้องเขียนค่าที่เก็บไว้ใหม่เกิน 200 ค่า (component_migration_too_large) - ประวัติ การกู้คืน การส่งออก สำเนาเว็บไซต์ การนำเข้า และแบ็กเอนด์ที่สร้าง เก็บรายการตามที่บันทึกไว้ เซลล์ CSV/XLSX เก็บบล็อกเป็น JSON และนำเข้าผ่าน ไฟล์คอลเลกชัน ได้ สื่อในบล็อกถูกติดตามตามคอมโพเนนต์ คีย์ของบล็อกชนิดอื่นจึงไม่ถูกอ่านเป็นสื่อ
- ความสัมพันธ์ภายในค่าของคอมโพเนนต์ (คอมโพเนนต์ใดก็ได้ ที่ความลึกใดก็ได้ ในบล็อกใดก็ได้) ระบุเป้าหมายด้วย id การอ่านสาธารณะและเว็บไซต์ที่สร้างซึ่งเผยแพร่แล้ว จะตัดเป้าหมายที่ไม่มีอยู่แล้ว อยู่ในถังขยะ ยกเลิกการเผยแพร่ หรือผู้อ่านนั้นอ่านไม่ได้ ออก: ลิงก์เดี่ยวกลายเป็น
nullรายการเก็บเป้าหมายที่เหลือตามลำดับ เวอร์ชันที่เก็บไว้ไม่เปลี่ยน - ตัวอย่างสำหรับเอดิเตอร์แสดงร่างล่าสุดที่บันทึกแล้วของรายการที่เกี่ยวข้องและมีสิทธิ์อ่าน รวมถึงรายการที่ยังไม่เคยเผยแพร่ ความสัมพันธ์ทั่วไปและในคอมโพเนนต์ใช้สิทธิ์ฟิลด์ ภาษา และกฎซ่อนฟิลด์ส่วนตัวเดียวกัน ลิงก์ตัวอย่างใหม่ตรวจสิทธิ์ปัจจุบันของผู้สร้างด้วย ดู ตัวอย่างร่าง.
- สำเนาเว็บไซต์นำคอมโพเนนต์ที่เว็บไซต์นี้เป็นเจ้าของและโมเดลของเว็บไซต์ใช้ไปด้วย (
components.jsonพร้อมเวอร์ชันของแต่ละคอมโพเนนต์) และเขียนคอมโพเนนต์เหล่านั้นก่อนโมเดล โดยใช้คอมโพเนนต์ของปลายทางที่มีฟิลด์เดียวกันซ้ำ และปฏิเสธคอมโพเนนต์อื่นภายใต้ slug เดียวกัน (component_slug_taken,component_shadows_shared,component_name_taken) ความสัมพันธ์แต่ละรายการภายในค่าของคอมโพเนนต์ถูกจับคู่กับรายการที่สำเนาสร้างขึ้น ความสัมพันธ์ที่สำเนาไม่ได้นำมาจะบล็อกการตรวจ (unresolved_relation) การเลิกทำการนำเข้าจะลบคอมโพเนนต์ที่การนำเข้าเขียนไว้เมื่อไม่มีฟิลด์ใดใช้แล้ว - ฟิลด์แบบผสมไม่มีการสร้างด้วย AI หรือ A/B variant (
mixed_component_context) A/B variant คืออินสแตนซ์ของฟิลด์คอมโพเนนต์เดียวที่ทำซ้ำได้ โดยสุ่มแสดงหนึ่งอินสแตนซ์ ไม่ได้ตั้งต่อบล็อก
ที่อยู่ของรายการ
หัวข้อที่มีชื่อว่า “ที่อยู่ของรายการ”แต่ละภาษาของรายการมีที่อยู่ของตัวเอง คือ slug ของภาษานั้น: API สาธารณะส่งภาษาฝรั่งเศสที่ /v1/<model>/<slug>?locale=fr ภายใต้ slug ภาษาฝรั่งเศส และแต่ละภาษาตอบเฉพาะที่ slug ของตัวเอง การอ่านรายการเดียวแสดงทุกภาษาที่เผยแพร่อยู่และ slug ของภาษานั้นใน alternates โมเดลอาจมีฟิลด์ข้อความที่มีคีย์ slug ด้วย ถ้าฟิลด์แปลได้ ค่าของแต่ละภาษาคือที่อยู่ของภาษานั้น ถ้าใช้ร่วมกัน ฟิลด์จะเก็บที่อยู่ของภาษาหลัก ตัวแก้ไข, API เนื้อหา, API การจัดการ, ปลั๊กอิน, การนำเข้าตาราง, การนำเข้าแพ็กเกจ และการนำเข้า Strapi ใช้กฎเดียวกัน การตรวจตารางรายงาน slug_invalid, slug_cleared และ slug_reserved ก่อนนำไปใช้ รวมถึงกรณีที่สองแถวในไฟล์เดียวระบุที่อยู่เดียวกันในภาษาเดียวกัน การตรวจการนำเข้า Strapi รายงาน slug_invalid, slug_conflict และ slug_taken ก่อนเริ่ม
| การบันทึก | ที่อยู่ของภาษามาจาก | ถูกปฏิเสธ |
|---|---|---|
| สร้าง | slugs[lang] ไม่เช่นนั้นฟิลด์ slug ของภาษานั้น ไม่เช่นนั้นชื่อเรื่องของภาษานั้นเอง ไม่เช่นนั้น (สำหรับคำแปล) ที่อยู่ของภาษาหลัก |
slug ที่ระบุแต่ไม่มีตัวอักษรหรือตัวเลข (slug_invalid) slug ที่ระบุซึ่งรายการอื่นถือในภาษานั้น (slug_reserved, slug_taken) slugs[lang] และฟิลด์ slug ระบุที่อยู่ต่างกัน (slug_conflict) |
| อัปเดต | slugs[lang] หรือค่าฟิลด์ slug ของภาษานั้นที่ต่างจากค่าที่เก็บไว้ อย่างอื่นคงที่อยู่เดิม |
การปฏิเสธเดียวกัน การล้างที่อยู่ หรือฟิลด์ slug ที่มีค่าอยู่ (slug_cleared) |
- การปฏิเสธทุกครั้งระบุฟิลด์และภาษา:
{ reason, field: "slug", locale, slug, held_by?, version? }ตัวแก้ไขแสดงไว้ใต้ที่อยู่ของภาษานั้น ไม่ใช่เป็นข้อความแจ้งเตือนลอย - slug ที่ระบุจะถูกปรับรูปแบบ: คงตัวอักษร ตัวเลข และเครื่องหมายประกอบ Unicode ปรับรูปแบบเป็น NFKC และตัวพิมพ์เล็ก โดยคั่นคำด้วยขีดกลางเดี่ยว
Harbour Wallกลายเป็นharbour-wallที่อยู่ที่ปรับแล้วถูกเขียนลงฟิลด์slugของภาษานั้น และคำตอบของการบันทึกส่งที่อยู่ของทุกภาษากลับมาเป็นslugs - ชื่อเรื่องไม่ใช่ที่อยู่ จึงไม่เคยถูกปฏิเสธ slug จากชื่อเรื่องที่ถูกใช้แล้วจะได้
-2,-3ไปเรื่อย ๆ เฉพาะในภาษานั้น slug ถือว่าถูกใช้แล้วเมื่อฉบับร่าง ฉบับปัจจุบัน หรือฉบับเผยแพร่ของรายการอื่นถือไว้ในภาษาเดียวกัน ชื่อเรื่องภาษาไทย รัสเซีย ญี่ปุ่น และภาษาอื่นสร้างที่อยู่ด้วยอักษรของภาษานั้นได้ ชื่อเรื่องที่ไม่มีตัวอักษรหรือตัวเลขจะไม่สร้างที่อยู่ คำแปลจะใช้ที่อยู่ของภาษาหลักแทน ตอนสร้างslugs[lang]: nullหมายถึงไม่มีที่อยู่ในภาษานั้น ที่อยู่ที่สร้างจากชื่อเรื่องถูกตัดเหลือ 180 ตัวอักษรก่อนเติม-2 - ภาษาที่เพิ่มโดยไม่ระบุ slug จะได้ที่อยู่ของภาษาหลัก และเติมส่วนท้ายถ้าภาษานั้นมีที่อยู่นี้อยู่แล้ว
- รายการเก่าที่ฟิลด์
slugต่างจากที่อยู่อยู่แล้วจะคงทั้งสองค่าไว้ในการบันทึกที่ไม่เกี่ยวข้อง การแก้ฟิลด์จะซ่อมให้ - การเปลี่ยนชื่อฉบับร่างไม่ย้ายที่อยู่ที่เผยแพร่ จนกว่าจะเผยแพร่ภาษานั้น
- แต่ละภาษาคงที่อยู่ของฉบับเผยแพร่ของตัวเอง การเผยแพร่ภาษาเดียวภายใต้ที่อยู่ใหม่จะย้ายและเปลี่ยนเส้นทางเฉพาะภาษานั้น
- การเผยแพร่จองที่อยู่ของทุกภาษาที่กำลังเผยแพร่ ภาษาของหน้าที่ไม่มีที่อยู่จะเผยแพร่ไม่ได้ (
page_address_requiredพร้อมlocaleของภาษานั้น) ที่อยู่ที่รายการอื่นถือในภาษานั้นอยู่แล้วจะถูกปฏิเสธ (slug_reserved) และไม่มีอะไรถูกเผยแพร่ - เส้นทางที่จัดการให้ซึ่งไม่มี
{locale}ให้ที่อยู่เฉพาะภาษาที่การอ่านแบบไม่ระบุภาษาส่งออกมา: ภาษาเริ่มต้น ไม่เช่นนั้นตามลำดับภาษาสำรองของเว็บไซต์ ไม่เช่นนั้นภาษาหลัก - การกู้คืนจะคืนที่อยู่ของแต่ละภาษาที่ฉบับนั้นบันทึกไว้ การนำเข้าแพ็กเกจ สำเนาเว็บไซต์ และการย้ายประวัติจะพาที่อยู่ของแต่ละภาษาไปในฉบับของมัน
ลิงก์ต่างกันในแต่ละภาษา
หัวข้อที่มีชื่อว่า “ลิงก์ต่างกันในแต่ละภาษา”ฟิลด์ความสัมพันธ์ของโมเดลที่มีคำแปลสามารถเปิด ลิงก์ต่างกันในแต่ละภาษา ได้: ในส่วน การตั้งค่า ของฟิลด์ เปิดสวิตช์ ค่านี้เก็บเป็น config.localizedMembership: true หากไม่เปิด ทุกภาษาแสดงรายการร่วมเดียวกัน
- แต่ละภาษามีรายการและลำดับของตนเอง ตัวแก้ไขแสดงและบันทึกรายการของภาษาที่คุณกำลังแก้ไข ในทุกภาษา รวมถึงคำแปล
- API การบันทึกรับรายการเหล่านี้ใต้
locale_relations(ภาษา → ฟิลด์ → รายการ,{ set }หรือ{ connect, disconnect, move }โดยรายการconnectใส่ตำแหน่งได้) การส่งฟิลด์แบบนี้ใต้relationsถูกปฏิเสธด้วยrelation_localized_fieldการส่งฟิลด์ที่ใช้ร่วมกันแยกตามภาษาถูกปฏิเสธด้วยrelation_not_localizedภาษาที่รายการไม่มีถูกปฏิเสธด้วยrelation_locale_missing - กฎทุกข้อใช้กับรายการของภาษาเดียวทีละภาษา: จำนวนแบบชี้ไปที่หนึ่ง ขีดจำกัดจำนวนรายการ เจ้าของเดียวต่อเป้าหมายในแบบหนึ่งต่อหนึ่งและหนึ่งต่อหลาย (
relation_target_takenเฉพาะเมื่อรายการอื่นถือเป้าหมายนั้นในภาษาเดียวกัน) และการวนของ ลำดับชั้น (แม่/ลูก) - เวอร์ชันเก็บรายการเหล่านี้ใต้
locale_relationsการเผยแพร่ พรีวิว การกู้คืน ถังขยะ การนำเข้า bundle สำเนาเว็บไซต์ และการโอนประวัติ เก็บรายการของแต่ละภาษาไว้ การลบภาษาถาวรจะลบรายการของภาษานั้น ภาษาใหม่เริ่มด้วยรายการว่าง - เชื่อมโยงจาก เปลี่ยนรายการของภาษาที่เปิดอยู่ มุมมองนี้รวมภาษาต่าง ๆ ของรายการเป็นแถวเดียว (ใช้ภาษาหลักเมื่อภาษาหลักลิงก์ถึงรายการนั้น) การลบที่นั่นเปลี่ยนเฉพาะรายการของภาษาของแถวนั้น
- การดำเนินการแบบกลุ่ม หมวดหมู่และแท็ก เปลี่ยนรายการของแต่ละภาษาที่เลือก หลายภาษาที่เลือกของรายการเดียวกันเปลี่ยนในการบันทึกครั้งเดียวกับเวอร์ชันเดียว แถวอื่นตอบ
covered - การเปิดตัวเลือกนี้คัดลอกรายการปัจจุบันของแต่ละรายการไปทุกภาษา การปิดจะเก็บรายการภาษาหลักของแต่ละรายการและลบรายการของภาษาอื่น การตรวจทานโมเดลเตือนเรื่องนี้ก่อน การปิดในฟิลด์หนึ่งต่อหนึ่งหรือหนึ่งต่อหลายถูกบล็อกขณะที่รายการภาษาหลักของสองรายการจะชี้ไปยังเป้าหมายเดียวกัน (
relation_targets_shared) และในฟิลด์ ลำดับชั้น (แม่/ลูก) ขณะที่รายการเหล่านั้นจะทำให้รายการหนึ่งอยู่ใต้ตัวเอง (hierarchy_cycles_shared) เวอร์ชันที่กู้คืนจากก่อนการเปลี่ยนแปลงทำตามกฎเดียวกัน - ตัวเลือกนี้ถูกปฏิเสธในโมเดลที่ไม่มีคำแปลและในคอมโพเนนต์ (
localized_membership_unsupported,localized_membership_not_in_component) - แบ็กเอนด์ที่สร้างเก็บฟิลด์แบบนี้ รวมถึงแบบชี้ไปที่หนึ่ง ในตารางเชื่อมที่แต่ละแถวมี
localeกฎความไม่ซ้ำทุกข้อใช้ต่อภาษา migration โหลดรายการของแต่ละภาษาที่เผยแพร่จากเวอร์ชันที่ให้บริการภาษานั้นPUT /api/<owner>/relations/<field>รับlocaleและเขียนรายการของภาษานั้นด้วยขีดจำกัดจำนวนรายการ กฎเจ้าของเดียว และกฎการวนของ parent เดียวกัน (unknown_localeเมื่อไม่ระบุภาษาหรือภาษาไม่รู้จัก) route อ่านอย่างเดียวของตารางเชื่อมให้บริการรายการของภาษาเดียวด้วยwhere[locale][equals]=<lang>ภาษาที่ไม่มีรายการอ่านได้เป็นรายการว่าง ไม่ใช่รายการของภาษาอื่น รายการร่วมยังใช้ตารางเชื่อมที่ไม่มีlocaleเพราะ SQLite ถือว่า NULL แตกต่างกันในดัชนีไม่ซ้ำ
ความสัมพันธ์กับหลายโมเดล
หัวข้อที่มีชื่อว่า “ความสัมพันธ์กับหลายโมเดล”ฟิลด์ความสัมพันธ์ของโมเดลรับรายการจากมากกว่าหนึ่งโมเดลได้ ในการตั้งค่าของฟิลด์ ให้คง โมเดลเป้าหมาย
ไว้ แล้วติ๊กโมเดลอื่นใต้ ยอมรับเพิ่มเติม ค่านี้เก็บใน config.allowedModels ซึ่งเป็นรายการที่เริ่มด้วย
โมเดลเป้าหมาย หากไม่มี ฟิลด์จะรับเฉพาะโมเดลเป้าหมายของตนเท่านั้น
- รายการผสมโมเดลได้ในลำดับใดก็ได้ ตัวเลือกค้นหาทุกโมเดลที่รับพร้อมกัน เรียงใหม่สุดก่อน และทุกแถวบอกโมเดลของตน จำกัดให้เหลือโมเดลเดียวด้วยปุ่มเหนือรายการ สร้างใหม่ จะถามว่าจะสร้างรายการของโมเดลใด เมื่อฟิลด์รับหลายโมเดล
- การอ้างอิงระบุโมเดลของเป้าหมาย API การบันทึกรับได้ทั้ง id ของอินสแตนซ์ หรือ
{ "model": "<slug>", "id": "<instance id>" }ทุกที่ที่การเขียนความสัมพันธ์รับ id (relations,locale_relationsในรายการ,set,connect,disconnectและmove) เมื่อระบุmodelต้องเป็นโมเดลของเป้าหมายจริง - การบันทึกถูกปฏิเสธด้วย
relation_target_not_foundเมื่อเป้าหมายไม่มีในไซต์นี้ เป็นของโมเดลที่ฟิลด์ไม่รับ ระบุโมเดล ต่างจากที่เป็นจริง หรือเป็นรายการที่ผู้บันทึกอ่านไม่ได้ คำตอบไม่แยกกรณีเหล่านี้ออกจากกัน รายการซ้ำถูกปฏิเสธด้วยrelation_duplicate_targetและเป้าหมายที่สองในฟิลด์แบบหนึ่งรายการด้วยrelation_cardinality - เวอร์ชัน เวอร์ชันที่เผยแพร่ และการกู้คืนเก็บโมเดลของแต่ละเป้าหมายไว้ข้าง id การกู้คืนตัดสินด้วยโมเดลที่ฟิลด์รับอยู่ใน
ตอนนี้ เวอร์ชันที่เชื่อมโมเดลซึ่งฟิลด์ไม่รับแล้วจะถูกปฏิเสธด้วย
relation_target_not_found - การเผยแพร่ ยกเลิกการเผยแพร่ และถังขยะปฏิบัติต่อรายการเหมือนกัน ไม่ว่าโมเดลใดชี้มา การยกเลิกเผยแพร่รายการที่รายการสดเชื่อม ผ่านฟิลด์จะแสดงรายการเหล่านั้น และ เชื่อมโยงจาก แสดงรายการจากทุกโมเดลที่ฟิลด์รับ
- การอ่านสาธารณะส่งแต่ละเป้าหมายเป็น
{ instance_id, model, slug, display }ดู Public read API เป้าหมายของโมเดลที่ฟิลด์ไม่รับแล้วจะไม่ถูกส่งrelation,tagและexpandบนฟิลด์ที่รับหลายโมเดลถูกปฏิเสธ - การคัดลอกไซต์และการนำเข้าแพ็กเกจเก็บลำดับของรายการและโมเดลของแต่ละเป้าหมาย รายการที่การอ้างอิงระบุโมเดลผิด หรือโมเดลที่ ฟิลด์ปลายทางไม่รับ จะไม่ถูกนำเข้า
- การเอาโมเดลที่รับออกขณะที่ยังมีรายการเชื่อมอยู่ถูกบล็อกในการตรวจโมเดล (
relation_model_removed) พร้อมระบุรายการ การเพิ่มโมเดลหรือเปลี่ยนลำดับรายการไม่ต้องตรวจ การย้าย โมเดลเป้าหมาย ไปโมเดลอื่นอยู่ภายใต้กฎเดียวกัน - ลิงก์ ลำดับชั้น (แม่/ลูก) ยังคงรับโมเดลเดียว (
mixed_relation_hierarchical) ป้ายของเป้าหมายคือ ช่องแสดงผล ของฟิลด์ เป้าหมายที่โมเดลไม่มีฟิลด์นั้นจะแสดง id แบบสั้น
ค่าที่ไม่ซ้ำ
หัวข้อที่มีชื่อว่า “ค่าที่ไม่ซ้ำ”ฟิลด์ text หรือ number ของโมเดลตั้งเป็น ไม่ซ้ำ ได้: เปิด ไม่ซ้ำ ในส่วน คุณสมบัติ ของฟิลด์ ฟิลด์ที่แปลได้เลือกได้อีกว่า ไม่ซ้ำในแต่ละภาษา (locale: สองรายการถือค่าเดียวกันในภาษาเดียวกันไม่ได้) หรือ ไม่ซ้ำในทุกภาษา (model: ค่าหนึ่งปรากฏได้ครั้งเดียวทั้งโมเดล รวมถึงภาษาต่าง ๆ ของรายการเดียวกัน) ฟิลด์ที่ใช้ร่วมทุกภาษาไม่ซ้ำกันทุกรายการ การตั้งค่าเก็บเป็น config.unique ฟิลด์ในคอมโพเนนต์ ชนิดอื่น และขอบเขตต่อภาษาบนฟิลด์ที่ใช้ร่วมจะถูกปฏิเสธ (unique_unsupported)
- ค่าถูกเทียบตามที่เก็บไว้: ข้อความแยกตัวพิมพ์เล็กใหญ่และไม่ตัดช่องว่าง ตัวเลขเทียบตามค่า ค่าว่างไม่ชนกับอะไร ข้อความที่ไม่ซ้ำยาวได้ไม่เกิน 255 ตัวอักษร
- ทั้งเวอร์ชันปัจจุบันและเวอร์ชันที่เผยแพร่ของรายการถือค่าของตัวเอง เช่นเดียวกับที่อยู่ เวอร์ชันของรายการเดียวกันไม่ชนกันเอง รายการในถังขยะยังถือค่าไว้จนกว่าจะลบถาวร
- การบันทึก การกู้คืน การนำเข้า การใช้สเปรดชีต หรือการเผยแพร่เวอร์ชันเก่าที่ทำให้ค่าซ้ำ จะถูกปฏิเสธด้วย
field_value_taken(409) ตัวแก้ไขแสดงข้อความใต้ฟิลด์และเก็บการแก้ไขไว้ รายการอื่นจะถูกระบุชื่อเฉพาะกับผู้ที่อ่านรายการนั้นได้ การตรวจสเปรดชีตรายงานก่อนใช้ การตรวจการนำเข้ารายงานก่อนรัน รวมถึงรายการในการนำเข้าเดียวกันที่ใช้ค่าเดียวกัน และการรันบล็อกรายการนั้นพร้อมแถวปัญหา - การเปิด ไม่ซ้ำ หรือเปลี่ยนขอบเขตจะถูกตรวจทานก่อน การตรวจทานแสดงรายการที่ใช้ค่าเดียวกัน (
unique_duplicatesพร้อมตัวอย่างค่า) และรายการที่มีค่ายาวเกิน 255 ตัวอักษร (unique_value_too_long) การนำการเปลี่ยนแปลงไปใช้จะถูกปฏิเสธด้วยmodel_change_blocked(409) ซึ่งระบุแต่ละรายการ จนกว่าจะแก้ครบ การเปลี่ยนแปลงระหว่างนำการเปลี่ยนแปลงไปใช้ จะถูกปฏิเสธ (model_change_stale) - แบ็กเอนด์ที่สร้างได้คอลัมน์ไม่ซ้ำ:
@uniqueบนคอลัมน์ของฟิลด์ หรือ@@unique([field, lang])สำหรับขอบเขตต่อภาษา คอลัมน์ของความสัมพันธ์แบบหนึ่งต่อหนึ่งก็ไม่ซ้ำเช่นกัน ความพร้อมในการสร้างและการบิลด์จะปฏิเสธรายการที่เผยแพร่ซึ่งใช้ค่าที่ไม่ซ้ำร่วมกัน (unique_value_shared) หรือชี้ไปยังเป้าหมายหนึ่งต่อหนึ่งเดียวกัน (one_to_one_target_shared) ก่อนสร้างสิ่งใด ข้อความที่ไม่ซ้ำแต่ว่างจะถูกเขียนเป็นnull
ตัวเลขใช้รูปแบบฐานสิบ รวมถึงเลขยกกำลังฐานสิบ ไม่รับสตริงฐานสิบหก ฐานสอง หรือฐานแปด
ชุดค่าที่ไม่ซ้ำ
หัวข้อที่มีชื่อว่า “ชุดค่าที่ไม่ซ้ำ”ในตั้งค่าโมเดล ชุดค่าที่ไม่ซ้ำ กำหนดกลุ่มที่มีชื่อได้สูงสุดแปดกลุ่ม กลุ่มละสองถึงสี่ช่องข้อความหรือตัวเลข เลือก ทุกภาษา หรือ ในแต่ละภาษา ช่องในกลุ่มต้องแปลได้ทั้งหมดหรือเป็นช่องร่วมทั้งหมด ขอบเขตแต่ละภาษาใช้กับช่องที่แปลได้เท่านั้น รูปแบบคือ settings.unique_groups: [{ "name": "catalog_sku", "fields": ["catalog", "sku"], "scope": "model" }].
ตรวจชุดค่าเฉพาะเมื่อทุกช่องมีค่า ข้อความเปรียบเทียบตามค่าที่เก็บ ตัวเลขตามค่าตัวเลข ข้อความยาวได้ไม่เกิน 255 อักขระ เวอร์ชันปัจจุบันและที่เผยแพร่จองชุดค่าไว้ การบันทึก กู้คืน นำเข้า และเผยแพร่ใช้การตรวจแบบอะตอมชุดเดียวกัน เมื่อเปิดข้อจำกัดจะตรวจค่าซ้ำเดิมก่อน สคีมาที่สร้างมีดัชนีเฉพาะแบบหลายช่อง และเพิ่ม lang เมื่อใช้ขอบเขตแต่ละภาษา ค่าซ้ำในข้อมูลที่เผยแพร่ขัดขวางการสร้าง
โมเดลรายการเดียว
หัวข้อที่มีชื่อว่า “โมเดลรายการเดียว”โมเดลเป็น collection (กี่รายการก็ได้) หรือ single (รายการเดียว เช่น หน้าแรกหรือการตั้งค่าเว็บไซต์) เปิด รายการเดียว ในการตั้งค่าทั่วไปของโมเดล ชนิดนี้เก็บเป็น content_model.kind และส่งในเนื้อหาคำขอ apply โมเดลเป็น model.kind ผ่าน Model Builder, management API (REST, CLI และ MCP) และสำเนาเว็บไซต์ การละ kind ในการอัปเดตจะคงชนิดที่เก็บไว้
- โมเดล single มีรายการเดียว ไม่ว่าจะมีกี่ภาษา รายการในถังขยะยังถือที่ไว้ กู้คืนรายการนั้น หรือลบถาวรเพื่อสร้างรายการใหม่
- การสร้างครั้งที่สองถูกปฏิเสธด้วย
single_entry_exists(409) พร้อมระบุรายการที่มีอยู่และบอกว่าอยู่ในถังขยะหรือไม่ การบันทึก การนำเข้า สำเนาเว็บไซต์ การใช้สเปรดชีต ปลั๊กอิน และ management API สร้างผ่านเส้นทางเดียวกันทั้งหมด การสร้างสองครั้งพร้อมกันไม่สามารถสำเร็จทั้งคู่: การตรวจทำซ้ำภายในการเขียน - สำเนาเว็บไซต์ที่มีมากกว่าหนึ่งรายการสำหรับโมเดล single ถูกบล็อกก่อนรัน (
single_entry_conflict) เช่นเดียวกับสำเนาที่โมเดล single มีรายการอยู่แล้วบนเว็บไซต์นี้ รวมถึงในถังขยะ (single_entry_taken) เว้นแต่รายการนั้นมาจากรายการต้นทางเดียวกัน เช่นในการนำเข้าซ้ำ - collection จะเป็น single ได้เฉพาะเมื่อมีไม่เกินหนึ่งรายการ นับรวมถังขยะ มิฉะนั้นการเปลี่ยนถูกปฏิเสธด้วย
model_change_blockedและการเปลี่ยนแปลงsingle_entry_conflictโมเดล single เปลี่ยนเป็น collection ได้เสมอ ไม่มีอะไรสูญหาย - ใน เนื้อหา การเลือกโมเดล single จะเปิดรายการของโมเดลนั้น เมื่อยังไม่มีรายการ หน้ารายการจะเสนอการดำเนินการ สร้างรายการ เพียงอย่างเดียว เมื่อรายการอยู่ในถังขยะ จะเสนอ กู้คืน
- API สาธารณะไม่เปลี่ยน:
GET /v1/<model>ตอบรายการที่มีไม่เกินหนึ่งรายการ และGET /v1/<model>/<slug>ตอบรายการนั้นตามที่อยู่ ดูAPI สาธารณะ - แบ็กเอนด์ที่สร้างจำกัดตารางของโมเดล single ไว้ที่หนึ่งแถว ดัชนีไม่ซ้ำปฏิเสธแถวที่สองไม่ว่าอะไรจะเขียน และ route สร้างตอบ
single_entry_exists(409)
โฟลเดอร์เนื้อหา
หัวข้อที่มีชื่อว่า “โฟลเดอร์เนื้อหา”โมเดลอยู่ใน โฟลเดอร์ ในรายการ เนื้อหา ได้ เพื่อให้เว็บไซต์ที่มีหลายโมเดลดูง่าย ตั้งในการตั้งค่าทั่วไปของโมเดลที่ โฟลเดอร์ ยาว 1 ถึง 40 ตัวอักษรหลังตัดช่องว่าง และ Blog กับ blog เป็นโฟลเดอร์เดียวกัน ล้างช่องเพื่อนำโมเดลออก
- โฟลเดอร์มีอยู่ตราบที่มีโมเดลใช้ ไม่มีรายการโฟลเดอร์ให้จัดการ และโฟลเดอร์ไม่ซ้อนกัน
- โมเดลที่ไม่มีโฟลเดอร์แสดงก่อน โฟลเดอร์ตามมาเรียงตามชื่อ แต่ละโฟลเดอร์เปิดและปิดได้ และเบราว์เซอร์จำว่าโฟลเดอร์ใดปิดอยู่ โฟลเดอร์ที่มีโมเดลที่เปิดอยู่จะเปิดเอง
- โฟลเดอร์บันทึกเองเมื่อช่องเสียโฟกัส ไม่ใช่ด้วย บันทึก ต้องมีสิทธิ์ที่ใช้การเปลี่ยนโมเดล (
model:apply) - เป็นการจัดระเบียบสำหรับบรรณาธิการเท่านั้น ไม่เปลี่ยนรีวิชันของโมเดล จึงไม่ทำให้ตัวแก้ไขที่เปิดอยู่ล้าสมัยหรือกลายเป็นการตรวจการเปลี่ยนที่ทำให้พัง ไม่เป็นส่วนของอินพุตการสร้าง แบ็กเอนด์ที่สร้าง หรือคำตอบสาธารณะใด ๆ
- สำเนาเว็บไซต์พาโฟลเดอร์ไปกับแต่ละโมเดลที่สร้าง โมเดลที่ปลายทางมีอยู่แล้วคงโฟลเดอร์ของตัวเอง management API ตั้งด้วย
setModelFolder(PUT /models/{id}/folder,schema:write) และแสดงเป็นfolderในแต่ละโมเดล
ฟิลด์ส่วนตัว
หัวข้อที่มีชื่อว่า “ฟิลด์ส่วนตัว”ฟิลด์ใดก็ได้ของโมเดลหรือของคอมโพเนนต์เป็น ส่วนตัว ได้: ในส่วน คุณสมบัติ ของฟิลด์ เปิด ส่วนตัว ค่านี้เก็บเป็น custom_field.private หรือเป็น private: true ในรายการฟิลด์ของคอมโพเนนต์
- ผู้แก้ไขเห็นและแก้ไขค่าส่วนตัวได้ ประวัติ การกู้คืน การส่งออก สำเนาเว็บไซต์ การนำเข้า และการอ่านผ่าน management API ที่ได้รับอนุญาต เก็บค่าเหล่านี้ไว้
- การอ่านสาธารณะทุกแบบไม่รวมค่าเหล่านี้: รายการ
GET /v1ความสัมพันธ์ที่ขยาย หน้าที่เกี่ยวข้อง ฟีดของ Blog การค้นหาในเว็บไซต์ TypeScript client สาธารณะที่สร้าง เว็บไซต์ที่สร้าง และคำตอบแบบ anonymous และ read token ของแบ็กเอนด์ที่สร้าง ฟิลด์ความสัมพันธ์หรือสื่อที่เป็นส่วนตัวจะไม่อยู่ในrelationsและmediaด้วย ภายในค่าของคอมโพเนนต์ ฟิลด์คอมโพเนนต์ที่เป็นส่วนตัวแต่ละฟิลด์ถูกลบออกทุกที่ที่ให้บริการค่านั้น รวมถึงเว็บไซต์ที่สร้าง - คำขอสาธารณะที่ระบุฟิลด์ส่วนตัวในตัวกรอง
sort,fields,relation,expandหรือ cursor ของหน้าที่เกี่ยวข้อง ถูกปฏิเสธเหมือนกับว่าฟิลด์นั้นไม่มีอยู่ - การเปลี่ยนชื่อหรือลบฟิลด์ส่วนตัวไม่เปิดเผยค่าของฟิลด์นั้น เวอร์ชันที่เผยแพร่ยังเก็บคีย์เดิมไว้ แต่การอ่านสาธารณะ การค้นหาในไซต์ และเว็บไซต์ที่สร้าง ให้บริการเฉพาะฟิลด์ที่โมเดลประกาศอยู่ตอนนี้
- ช่องของโมเดลใช้คีย์ที่เวอร์ชันเก่ายังเก็บค่าของช่องอื่นไว้ไม่ได้ รวมถึงการเพิ่มช่อง เปลี่ยนคีย์ หรือเปลี่ยนวิธีอ่านช่องคอมโพเนนต์ของโมเดล การบันทึกได้
409 model_change_blockedพร้อมretained_key_reuseให้เลือกคีย์อื่นขณะที่ยังมีเวอร์ชันเก็บค่าเดิมอยู่ ส่วนการแก้ช่องภายในคอมโพเนนต์จะเก็บโครงสร้างเดิมและเวอร์ชันของอินสแตนซ์ไว้โดยไม่ตีความค่าเก่าใหม่ แต่ละโครงสร้างเดิมใช้ความเป็นส่วนตัวของตัวเองร่วมกับช่องที่เป็นส่วนตัวในโครงสร้างปัจจุบัน เวอร์ชันประวัติอื่นไม่เปลี่ยนความเป็นส่วนตัวของโครงสร้างนั้น จับคู่ช่องด้วยรหัสประจำช่องแม้เปลี่ยนชื่อ และใช้คีย์เมื่อไม่มีรหัส การเปลี่ยนโครงสร้างใหม่ไม่ทำให้ค่าเก่าที่เป็นส่วนตัวกลายเป็นสาธารณะ การนำเข้าเทียบค่ากับโครงสร้างต้นทางและปลายทางที่บันทึกตอนตรวจ (unmapped_source_key,source_private_value,import_definition_changed) ดู การนำเข้า - คอมโพเนนต์ที่สร้างหรือ fork ภายใต้ slug ที่ไซต์อ่านอยู่แล้ว คือนิยามใหม่สำหรับค่าที่ไซต์บันทึกไว้ ระบบจะเทียบกับนิยามที่ slug นั้นเคยอ่านก่อนหน้า คีย์ที่นิยามเดิมไม่มีนับเป็นฟิลด์ใหม่ คีย์ที่นิยามเดิมตั้งเป็นส่วนตัวแต่นิยามใหม่จะส่งออกไปก็นับเช่นกัน การปฏิเสธคือ
409 retained_key_reuseและไม่มีอะไรถูกสร้าง การยืนยันการ override (acknowledge_shadow) ไม่ได้ยกเลิกการปฏิเสธนี้ fork คัดลอกนิยามที่ใช้ร่วมกันมาทุกประการ จึงไม่ได้อ่านอะไรต่างไป การทำให้ฟิลด์ของคอมโพเนนต์ของไซต์เองเป็นสาธารณะในภายหลังเป็นการเปลี่ยนความเป็นส่วนตัวตามปกติ - ในการติดตั้งที่แยกฐานข้อมูลต่อไซต์ การเปลี่ยนรายการช่องหรือสถานะเลิกใช้ของคอมโพเนนต์ร่วมถูกปฏิเสธด้วย
409 split_topology_migration_unsupportedยังเปลี่ยนชื่อได้ ให้ทำสำเนาคอมโพเนนต์สำหรับไซต์ก่อนแก้ช่อง การสร้างโครงสร้างร่วมใหม่หรือใช้คอมโพเนนต์ของไซต์แทนของร่วมยังถูกปฏิเสธหากอาจเปิดเผยค่าเดิมภายใต้ช่องอื่น (retained_key_reuseหรือsplit_topology_reinterpretation_unsupported) หากเข้าถึงฐานข้อมูลไซต์ไม่ได้จะได้503 site_database_unavailableระหว่างเปลี่ยนคอมโพเนนต์ของไซต์ ระบบพักการเขียนชนิดเนื้อหาที่เกี่ยวข้อง การบันทึก กู้คืน ย้ายประวัติ หรือกู้คืนภาษาที่มาพร้อมกันได้component_migration_in_progressส่วนการเขียนที่เตรียมก่อนเปลี่ยนได้model_contract_changedให้ลองอีกครั้งหลังเปลี่ยนเสร็จ และตรวจการนำเข้าใหม่เมื่อโครงสร้างที่บันทึกไว้ตอนตรวจเปลี่ยนไป - การเปลี่ยนชื่อ ลบ หรือเปลี่ยนชนิดของฟิลด์ยังยกเลิกการบันทึกที่วางแผนไว้ตามนิยามเดิม (
model_contract_changed) ให้ลองใหม่ เวอร์ชันที่มีคีย์นั้นซึ่งบันทึกระหว่างการตรวจทำให้การเปลี่ยนถูกปฏิเสธ (model_change_staleหรือcomponent_changedสำหรับคอมโพเนนต์) ให้ลองอีกครั้ง - การทำให้ฟิลด์เป็นส่วนตัวหรือกลับเป็นสาธารณะจะทำดัชนีการค้นหาในเว็บไซต์ของโมเดลใหม่และล้างการอ่านสาธารณะที่แคชไว้ คีย์ของการอ่านที่แคชยังรวมฟิลด์ส่วนตัวของโมเดลด้วย ฟิลด์ที่เพิ่งเป็นส่วนตัวจึงไม่มีวันเจอเนื้อหาที่แคชไว้ก่อนหน้า การเปลี่ยนนี้ยังยกเลิกการบันทึกที่วางแผนไว้ตามนิยามเดิม (
model_contract_changed) ให้ลองใหม่ - แบ็กเอนด์ที่สร้างเก็บคอลัมน์ส่วนตัวไว้สำหรับผู้แก้ไข การอ่านแบบ anonymous, read token และคำตอบของการเขียนทุกครั้งเลือกเฉพาะคอลัมน์สาธารณะ คอลัมน์คอมโพเนนต์ที่มีฟิลด์ส่วนตัวอยู่ที่ระดับใดก็ตามด้านล่างจะไม่อยู่ในคำตอบเหล่านั้นทั้งคอลัมน์: route ที่สร้างคืน select ของ guard เอง และการ project JSON บางส่วนจะต้องเขียนคำตอบใหม่อีกรอบในทุก route อ่านและเขียน ตารางเชื่อมของความสัมพันธ์แบบรายการที่เป็นส่วนตัวไม่ให้บริการแก่ reader
- saved query ที่ผูกกับ trusted route ซึ่งการดำเนินการให้บริการแบบ anonymous (
publicในนโยบายแบ็กเอนด์) ไม่สามารถ select กรอง หรือเรียงตามฟิลด์ส่วนตัว การผูก query แบบนี้ หรือแก้ query ที่ผูกแล้วให้ระบุฟิลด์ส่วนตัว ถูกปฏิเสธ (private_field_on_public_route, 422) และการสร้างปฏิเสธชุดนั้น (saved_query_private_field) เมื่อนโยบายหรือฟิลด์เปลี่ยนไปหลังจากนั้น ฟิลด์คอมโพเนนต์ที่มีฟิลด์ส่วนตัวที่ความลึกใดก็ตามนับเป็นฟิลด์ส่วนตัวที่นี่ด้วย เช่นเดียวกับ reader ที่สร้าง เมื่ออ่านนิยามคอมโพเนนต์ไม่ได้ ฟิลด์คอมโพเนนต์ทุกฟิลด์นับเป็นส่วนตัว
ความคิดเห็นของผู้เยี่ยมชม
หัวข้อที่มีชื่อว่า “ความคิดเห็นของผู้เยี่ยมชม”โมเดลใดก็ได้รับความคิดเห็นของผู้เยี่ยมชมบนรายการที่เผยแพร่ได้ เปิด ความคิดเห็นจากผู้เยี่ยมชม ในการตั้งค่าทั่วไปของโมเดล การตั้งค่านี้คือคีย์ comments ในการตั้งค่าของโมเดลเอง ({"comments": true}) ไม่มีที่อื่นเก็บค่านี้ โมเดลโพสต์ของ Blog เป็นโมเดลหนึ่งในลักษณะนี้: โพสต์ → ความคิดเห็น → รับความคิดเห็นใหม่ เปลี่ยนคีย์เดียวกัน โมเดลที่ไม่เป็นสาธารณะจะไม่แสดงความคิดเห็นเลย
- ความคิดเห็นเป็นของโมเดล รายการ และหนึ่งภาษา ไม่ใช่ของที่อยู่ การเปลี่ยนชื่อรายการยังคงความคิดเห็นไว้ แต่ละภาษามีเธรดของตนเอง การตอบกลับตอบความคิดเห็นระดับบนสุดที่อนุมัติแล้วของรายการและภาษาเดียวกัน การตอบกลับมีระดับเดียว
- ความคิดเห็นแสดงเฉพาะบนรายการที่เผยแพร่อยู่ในขณะนี้ การยกเลิกการเผยแพร่หรือย้ายลงถังขยะจะซ่อนความคิดเห็น การปิดการตั้งค่าจะซ่อนความคิดเห็นทั้งหมด และปฏิเสธความคิดเห็นใหม่และ reaction ใหม่ ไม่มีอะไรถูกลบ ลบถาวร ในถังขยะจะลบความคิดเห็นของรายการและ reaction ของความคิดเห็นเหล่านั้น
- ความคิดเห็นใหม่จะรอ: รอตรวจ, อนุมัติแล้ว, สแปม หรือ ปฏิเสธแล้ว ตรวจกลั่นกรองได้ใน เนื้อหา → ความคิดเห็น ซึ่งครอบคลุมทุกโมเดลและกรองตามโมเดลได้ หรือใน Blog ที่ โพสต์ → ความคิดเห็น กฎเป็นแบบเดียวกับของ Blog: ดูความคิดเห็นของ Blog
| การดำเนินการ | สิทธิ์ |
|---|---|
| อ่านและตรวจกลั่นกรอง | content:publish |
| ลบถาวร | content:publish และสิทธิ์ลบในโมเดลของความคิดเห็น |
| เปิดหรือปิดความคิดเห็นของโมเดล | site:settings (โพสต์ → ความคิดเห็น, PUT /api/comments/settings) หรือ model:apply (สวิตช์ ความคิดเห็นจากผู้เยี่ยมชม ของโมเดล ซึ่งบันทึกพร้อมโมเดลใน ตัวสร้างเนื้อหา) |
| ทำเครื่องหมาย Helpful ให้ความคิดเห็นในนามตนเอง | สิทธิ์อ่านในโมเดลของความคิดเห็น |
Reaction
หัวข้อที่มีชื่อว่า “Reaction”ความคิดเห็นรับ reaction ได้ชนิดเดียว: Helpful
- หนึ่ง reaction ต่อผู้เยี่ยมชมหรือบุคคล ความคิดเห็น และชนิด การส่งซ้ำนับครั้งเดียว ถอน reaction ได้ เฉพาะความคิดเห็นที่อนุมัติแล้วเท่านั้นที่รับ reaction
- ระบบแยกผู้เยี่ยมชมต่อความคิดเห็นด้วย digest ของเว็บไซต์ ความคิดเห็น และที่อยู่ของ client ซึ่งใช้คีย์
FORM_INTAKE_HMAC_KEYของ intake Worker setup สร้างคีย์นี้ครั้งเดียวและไม่เปลี่ยน ที่อยู่ไม่ถูกเก็บ และ reaction ของผู้เยี่ยมชมคนเดียวบนสองความคิดเห็นเชื่อมโยงกันไม่ได้ ผู้เยี่ยมชมที่ใช้ที่อยู่ร่วมกันนับเป็นคนเดียว - intake Worker ที่ไม่มีคีย์จะปฏิเสธ reaction ของผู้เยี่ยมชม (
not_configured, 503) และแสดง Reactions are not set up on this site yet. ความคิดเห็นยังทำงานต่อ รัน setup อีกครั้งเพื่อเพิ่มคีย์ - บุคคลที่ลงชื่อเข้าใช้ทำเครื่องหมาย Helpful ให้ความคิดเห็นในรายการตรวจกลั่นกรองในนามตนเอง
- จำนวนแสดงบนความคิดเห็น Dee Wan ไม่เก็บสถิติ reaction
- client หนึ่งรายส่ง reaction ได้ 60 ครั้งทุก 10 นาทีต่อเว็บไซต์ นับแยกจากความคิดเห็นและฟอร์ม
ผู้เยี่ยมชมเลือก Oldest (ค่าเริ่มต้น), Newest หรือ Most helpful (?comments_order=) และการอ่านสาธารณะรับ order=oldest|newest|best
best: reaction Helpful มากที่สุดก่อน จำนวนเท่ากันเรียงเก่าสุดก่อน จากนั้นตาม id ความคิดเห็น อ่านเฉพาะ reaction และเวลาที่เก็บไว้ ไม่อ่านนาฬิกา ความคิดเห็นชุดเดียวกันจึงเรียงลำดับเดิมเสมอ- การตอบกลับเรียงเก่าสุดก่อนเสมอใต้ความคิดเห็นของตน
ที่ที่ความคิดเห็นแสดง
หัวข้อที่มีชื่อว่า “ที่ที่ความคิดเห็นแสดง”- managed renderer วาดความคิดเห็นใต้ทุกโพสต์ของ Blog และทุกหน้ารายการที่ route ให้บริการ หน้าที่โมเดลไม่รับความคิดเห็นจะไม่วาด
- เว็บไซต์ที่ส่งออกวาดความคิดเห็นบนโพสต์ของ Blog และหน้ารายการของทุกโมเดลที่รับความคิดเห็น หน้าเหล่านี้ให้บริการตอนรับคำขอ เช่นเดียวกับโพสต์ของ Blog และอ่านความคิดเห็นสด หน้าอื่นยังเรนเดอร์ล่วงหน้า โมเดลใดรับความคิดเห็นถูกกำหนดตอนสร้างเว็บไซต์: หลังเปิดหรือปิดความคิดเห็นของโมเดล ให้สร้างเว็บไซต์ใหม่
- Renderer อ่าน
GET /v1/_comments?entry=&order=ผู้เยี่ยมชมส่งไปที่/v1/interactions/comment.submitและ/v1/interactions/comment.reactบนโฮสต์ของเว็บไซต์ ทั้งสองทำงานได้โดยไม่ใช้ JavaScript ดูAPI สาธารณะ - เมื่อเปิด public edge cache อยู่ reaction จะรีเฟรชความคิดเห็นที่แคชไว้ทันทีก็ต่อเมื่อ intake Worker มีการตั้งค่า purge (
PUBLIC_CACHE_MAX_AGE,CF_PURGE_ZONE_ID,CF_PURGE_API_TOKEN) มิฉะนั้นจำนวนจะรีเฟรชภายในห้านาที การตรวจกลั่นกรองและการตั้งค่าโมเดล purge จากแอดมิน
สำเนาและ management API
หัวข้อที่มีชื่อว่า “สำเนาและ management API”- สำเนาเว็บไซต์และการโอนประวัติเว็บไซต์นำทุกความคิดเห็นของทุกรายการที่ส่งออกไปด้วย พร้อมสถานะ อีเมลส่วนตัว และจำนวน reaction ผู้ที่กด reaction ไม่ถูกส่งไป: จำนวนมาถึงเป็น reaction ที่นำเข้าของความคิดเห็นและบวกกับ reaction ใหม่ ความคิดเห็นที่คัดลอกจึงคงตำแหน่งใน
best - management API แสดงรายการ อ่าน ตรวจกลั่นกรอง และลบความคิดเห็น และเปิดหรือปิดความคิดเห็นของโมเดล ผ่าน REST, CLI และ MCP เหมือนกัน ดูmanagement API
การตรวจเนื้อหาโดยปลั๊กอิน
หัวข้อที่มีชื่อว่า “การตรวจเนื้อหาโดยปลั๊กอิน”ปลั๊กอินที่ติดตั้งอาจตรวจเนื้อหาก่อนบันทึกหรือเผยแพร่ (การตั้งค่า → ปลั๊กอิน ใต้ปลั๊กอินนั้น) กฎของ Dee Wan เองทำงานก่อนเสมอ การตรวจไม่เคยแทนที่กฎเหล่านั้น
- การตรวจที่ปฏิเสธจะหยุดการบันทึก การกู้คืน หรือการเผยแพร่ ตัวแก้ไขระบุชื่อปลั๊กอินและการตรวจ แสดงข้อความที่ฟิลด์ที่ระบุ และเก็บการแก้ไขของคุณไว้ ไม่มีอะไรถูกเขียน
- การตรวจที่เตือนจะให้การเปลี่ยนแปลงผ่านและแสดงคำเตือน ไม่ต้องบันทึกซ้ำ
- เมื่อการตรวจไม่ตอบ การตั้งค่าของปลั๊กอินเป็นตัวตัดสิน ค่าเริ่มต้นให้การเปลี่ยนแปลงผ่านพร้อมหมายเหตุ เมื่อเปิด บล็อกการเปลี่ยนแปลงถ้าไม่ตอบ จะไม่มีอะไรเปลี่ยน และตัวแก้ไขจะบอกว่าปลั๊กอินไม่ตอบ
- การบันทึก การกู้คืน การเผยแพร่ การทำงานแบบกลุ่ม การนำสเปรดชีตมาใช้ การนำเข้า API การจัดการ และการเขียนของปลั๊กอินอื่นถูกตรวจทั้งหมด ปลั๊กอินที่ปิดอยู่หรือไม่ได้รับสิทธิ์ในชนิดเนื้อหานั้นจะไม่ถูกถาม
เปลี่ยนอย่างปลอดภัย
หัวข้อที่มีชื่อว่า “เปลี่ยนอย่างปลอดภัย”ตรวจผลล่วงหน้าของการเปลี่ยนโมเดลก่อนใช้ สำรองข้อมูลก่อนเปลี่ยนแบบทำลายข้อมูลหรือไม่เข้ากัน การยอมรับการเปลี่ยนโมเดลไม่ใช่การสำรอง สร้าง TypeScript client สาธารณะ ใหม่หลังเปลี่ยนโมเดล และบิลด์เว็บไซต์ที่ใช้งานใหม่
ซอร์สอ้างอิงการตั้งค่าฟิลด์คือ frontend/src/lib/eav/field-config-schema.ts ชนิดฟิลด์ที่แบ็กเอนด์ที่สร้างรองรับระบุใน backend/src/lib/graduate/input.ts เอกสารอ้างอิง API ของแบ็กเอนด์อิสระ และ รายละเอียดการทำงานภายใน อธิบาย API และฐานข้อมูลที่ส่งออก ไม่ใช่โครงสร้างจัดเก็บภายใน CMS
คำแปลป้ายกำกับ
หัวข้อที่มีชื่อว่า “คำแปลป้ายกำกับ”ในการตั้งค่าโมเดลหรือแท็บ คุณสมบัติ ของฟิลด์ เปิด คำแปลป้ายกำกับ แล้วเลือกภาษาอินเทอร์เฟซ แปลชื่อและคำอธิบายโมเดล ป้ายกำกับ คำอธิบาย ข้อความช่วยเหลือ และข้อความตัวอย่างของฟิลด์ รวมถึงชื่อและคำอธิบายกลุ่มและป้ายกำกับตัวเลือก แปลกลุ่มในการตั้งค่าโมเดล และแปลตัวเลือกในตัวแก้ไขตัวเลือก
ป้ายกำกับใช้ภาษาอินเทอร์เฟซของผู้ใช้ ไม่ขึ้นกับภาษาเนื้อหาของรายการ ลำดับสำรองคือโลแคลอินเทอร์เฟซที่ตรงกัน ภาษาหลักของโลแคลนั้น ภาษาเริ่มต้นของเว็บไซต์ แล้วจึงใช้ป้ายกำกับต้นฉบับ ข้ามคำแปลที่ว่าง คีย์ API, slug โมเดล คีย์กลุ่ม และค่าตัวเลือกไม่เปลี่ยน โครงสร้างโมเดล management API และสำเนาเว็บไซต์เก็บคำแปลไว้ โดยไม่เปลี่ยนค่าเนื้อหาสาธารณะ
{ "model": { "settings": { "translations": { "ru": { "name": "Статьи", "groups": { "seo": { "label": "Поиск" } } } } } }, "field": { "ui": { "group": "seo", "translations": { "ru": { "label": "Заголовок", "placeholder": "Название статьи" } } }, "config": { "type": "select", "options": [ { "value": "gold", "label": "Gold", "translations": { "ru": "Золотой" } } ] } }}การตรวจสอบฉบับร่าง
หัวข้อที่มีชื่อว่า “การตรวจสอบฉบับร่าง”การตรวจสอบฉบับร่าง ใช้ อนุญาตให้บันทึกข้อมูลไม่ครบ เป็นค่าเริ่มต้น บันทึกได้แม้ยังไม่มีค่าที่จำเป็น รวมถึงสมาชิกภายในคอมโพเนนต์และกลุ่ม แต่ค่าที่ระบุแล้วยังต้องถูกต้องตามชนิด ช่วง และโครงสร้าง ก่อนเผยแพร่จะตรวจสอบฟิลด์ที่จำเป็นทั้งหมด เลือก ต้องกรอกข้อมูลให้ครบ เพื่อตรวจสอบฟิลด์ที่จำเป็นเมื่อบันทึกฉบับร่างด้วย ตั้งค่า model.settings.validation_mode เป็น draft หรือ strict
วันที่พร้อมเขตเวลาและพิกัด
หัวข้อที่มีชื่อว่า “วันที่พร้อมเขตเวลาและพิกัด”สำหรับฟิลด์ date รูปแบบ datetime เปิด เก็บเขตเวลา (withTimezone: true) ตัวแก้ไขเก็บวันที่และเวลาท้องถิ่นคู่กับเขตเวลา IANA ที่เลือก ปฏิเสธเวลาที่ไม่มีอยู่ช่วงเปลี่ยนเวลาออมแสง และให้เลือกช่วงเวลาอย่างชัดเจนเมื่อเวลาท้องถิ่นซ้ำกัน การเปลี่ยนเขตเวลาคงเวลาท้องถิ่นที่กรอกและคำนวณเวลาจริงใหม่ ตัวเลือกช่วงเวลายังแสดงเมื่อเวลาท้องถิ่นซ้ำกัน และเก็บวินาทีกับมิลลิวินาทีไว้ ผู้ใช้ API ได้รับทั้งสองค่า:
{ "datetime": "2026-10-18T05:30:00.000Z", "timezone": "Asia/Bangkok" }ฟิลด์วันที่อย่างเดียว เวลาอย่างเดียว และวันที่-เวลาแบบเดิมยังเก็บเป็นสตริง เปลี่ยนรูปแบบการเก็บเขตเวลาไม่ได้ขณะมีค่าที่บันทึกอยู่ เพราะไม่ทราบเขตเวลาที่ตั้งใจใช้เดิม ให้กรอกฟิลด์ใหม่พร้อมเขตเวลาที่เลือกอย่างชัดเจน การเรียงและเปรียบเทียบใช้เวลาจริง ส่วนเขตเวลายังคงอยู่ในค่า
ฟิลด์ point เก็บละติจูดตั้งแต่ −90 ถึง 90 และลองจิจูดตั้งแต่ −180 ถึง 180 เป็นตัวเลขจำกัด ศูนย์เป็นพิกัดที่ถูกต้อง ช่องกรอกสองช่องบันทึกเป็นค่าเดียว:
{ "latitude": 13.7563, "longitude": 100.5018 }ตัวกรองพิกัดรองรับรัศมีเป็นเมตรและกรอบพื้นที่ รวมถึงกรอบที่ข้ามเส้นเมริเดียน 180° การเรียงตามระยะใกล้ใช้ระยะทางวงกลมใหญ่ที่คำนวณตรง และเรียงตาม ID รายการเมื่อระยะเท่ากัน จำนวนผลลัพธ์ การแบ่งหน้า และการเลือกตามตัวกรองใช้คำสั่งค้นหาเดียวกัน พิกัดและวันที่พร้อมเขตเวลาคงรูปแบบออบเจ็กต์ในประวัติ การนำเข้า คำตอบ API สาธารณะ และแบ็กเอนด์ที่สร้าง
ขั้นตอนถัดไป
หัวข้อที่มีชื่อว่า “ขั้นตอนถัดไป”เชิญทีมของคุณและกำหนดบทบาทใน ผู้ใช้ บัญชี และสิทธิ์เข้าถึง
ความสัมพันธ์ภายในคอมโพเนนต์
หัวข้อที่มีชื่อว่า “ความสัมพันธ์ภายในคอมโพเนนต์”การตั้งค่า ยอมรับเพิ่มเติม ใช้กับฟิลด์ความสัมพันธ์ในคอมโพเนนต์ที่ใช้ซ้ำได้ รวมถึงคอมโพเนนต์ซ้อน คอมโพเนนต์
แบบหลายรายการ และรายการบล็อกหลายชนิด รายการที่เลือกแต่ละรายการเก็บทั้ง { model, id } และลำดับเดิม
เมื่อเปลี่ยนความสัมพันธ์ เซิร์ฟเวอร์ตรวจโมเดลจริงของเป้าหมาย ไซต์ และสิทธิ์อ่านปัจจุบัน กฎจำนวนรายการ
และการตรวจสอบฟิลด์ยังคงมีผล
ประวัติและการกู้คืนเก็บค่าเหล่านี้ การคัดลอกไซต์และการนำเข้าแพ็กเกจเปลี่ยน ID พร้อมโมเดลเป็นของรายการ ปลายทาง หากหาเป้าหมายไม่ได้จะบล็อกการนำเข้า การอ่านสาธารณะและเว็บไซต์ที่สร้างจะตัดเป้าหมายที่ยังไม่เผยแพร่ ถูกลบ หรือไม่มีสิทธิ์อ่านออก โดยไม่แก้เวอร์ชันที่บันทึกไว้
สายรายการแม่ที่เผยแพร่แล้ว
หัวข้อที่มีชื่อว่า “สายรายการแม่ที่เผยแพร่แล้ว”ฟิลด์ลำดับชั้นที่เป็นสาธารณะส่งสายรายการแม่จากเวอร์ชันที่เผยแพร่ในภาษาที่ให้บริการไว้ใน ancestors[field]
แต่ละรายการมี ID ภาษาที่ให้บริการ ป้ายปัจจุบันที่เผยแพร่ และที่อยู่จริงบนไซต์ แต่ละสายมีรายการแม่ที่ใกล้ที่สุดไม่เกิน 32 รายการ เรียงจากรายการที่ไกลที่สุดในผลลัพธ์ลงมาถึงรายการแม่โดยตรง ส่งฟิลด์ลำดับชั้นสาธารณะไม่เกินแปดฟิลด์ตามลำดับคีย์ สายที่ยาวกว่านี้จะหยุดที่ขอบเขตดังกล่าว
สายจะหยุดเมื่อพบรายการที่อ่านไม่ได้ ฟิลด์ป้ายเป็นส่วนตัว หรือโมเดลไม่มีที่อยู่สาธารณะ ระบบไม่สร้างป้ายหรือ URL ขึ้นเอง
ตัวแสดงผล SEO ร่วมสร้าง BreadcrumbList เมื่อมีสายรายการแม่พร้อมป้ายและที่อยู่ของรายการปัจจุบัน การแก้ฉบับร่าง
ไม่เปลี่ยน breadcrumb ที่เผยแพร่ เมื่อเผยแพร่รายการแม่ที่เปลี่ยนชื่อหรือย้ายตำแหน่ง การอ่านครั้งถัดไปจะได้ค่าใหม่
และแคชที่เกี่ยวข้องของโมเดลจะถูกล้าง เว็บไซต์ที่สร้างเก็บสายจากข้อมูลเผยแพร่ที่ใช้ในการสร้าง เมื่อข้อมูลนั้นเปลี่ยน
ให้สร้างเว็บไซต์ใหม่
ยังไม่เปิดตัว (pre-MVP) และยังไม่มีเวอร์ชันเสถียร
คอมมิตซอร์สโค้ด: fe23db481c422b40e317b92fc98116b4c0c26a87 (มีการแก้ไขที่ยังไม่คอมมิต)
วันที่สร้างเอกสาร (UTC): 2026-10-18T09:22:34.630Z
คอมมิตสำหรับอัปเกรด: ระบุไม่ได้: มีการแก้ไขที่ยังไม่คอมมิต. บันทึกการเปลี่ยนแปลง