ในการสืบค้นลิสต์เนื้อหา คุณสามารถกำหนดค่าสำหรับคุณสมบัติที่คำนวณเมื่อเพจทำงาน เพื่อแสดงเนื้อหาที่อัปเดตล่าสุด
คุณสมบัติส่วนใหญ่ของคุณสมบัติภายในไซต์เป็นแบบสแตติก ผู้ใช้จะเลือกหรือป้อนสตริงหรือค่าแบบคงที่สำหรับคุณสมบัติหนึ่งขององค์ประกอบ และจะไม่มีการเปลี่ยนแปลงไม่ว่าเพจจะทำงานเมื่อไหร่หรือที่ใดก็ตาม แต่คุณสามารถกำหนดค่าสำหรับคุณสมบัติที่คำนวณเมื่อเพจทำงาน คุณสมบัตินี้มีประโยชน์สำหรับการแสดงเนื้อหาที่เพิ่งอัปเดตล่าสุดในการสืบค้นเนื้อหา ผู้ใช้สามารถป้อนวันที่ เช่น "ใน 3 วันล่าสุด"
คุณสามารถแทรกการขยาย Mustache JS ในหลายคุณสมบัติ ค่าที่อ้างอิงในสตริงเหล่านี้ได้รับมาจากโมเดลที่รันเมื่อเพจทำงาน โมเดลที่มาพร้อมกับผลิตภัณฑ์สามารถรองรับวันที่ที่จัดรูปแบบสำหรับการเรียก REST API ของเนื้อหา คุณสามารถขยายโมเดลนี้ด้วยค่าเพิ่มเติม เพื่อให้ตรงตามความต้องการของผู้ใช้
ตัวอย่างสตริงที่คุณสามารถป้อนสำหรับคุณสมบัติมีดังนี้
Content List component:
Additional Query String property:
updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"
รายการ Mustache นี้สำหรับวันที่จะมีการประมวลผลขณะรันไทม์ เพื่อให้ค่าผลลัพธ์เปลี่ยนแปลงตามเวลาที่รัน (กล่าวคือ ขยายเป็น updatedDate gt "2220181002060000000") วิธีนี้ทำให้ผู้ใช้สามารถสร้างสตริงวันที่ที่ซับซ้อน โดยไม่ต้องป้อนค่าที่กำหนดไว้ล่วงหน้า
คุณสมบัติขององค์ประกอบที่รองรับ
คุณสมบัติต่อไปนี้รองรับรูปแบบคำสั่งของเทมเพลท Mustache JS
ลิสต์ของเนื้อหา
สตริงการสืบค้นเพิ่มเติม
ตัวอย่าง: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"
ชื่อ/ย่อหน้า/ข้อความ
ข้อความที่มีรูปแบบที่ป้อนผ่าน CKEditor
ตัวอย่าง: "รูปแบบ REST API ของเนื้อหาสำหรับวันที่: {{#content.date}}now{{/content.date}}"
หมายเหตุ:
ถ้าไม่มีโมเดลที่กำหนดเองสำหรับเทมเพลท Mustache การขยายในชื่อ/ย่อหน้า/ข้อความจะไม่มีประโยชน์มากนัก แต่จะมีประโยชน์สำหรับการตรวจสอบความถูกต้องของข้อมูลที่คุณป้อนในสตริงการสืบค้นเพิ่มเติม เนื่องจากระบบจะประมวลผลเมื่อคุณสลับระหว่างโหมดแก้ไขและดู และข้อมูลจะปรากฏทันทีรูปแบบคำสั่งขององค์ประกอบที่รองรับ
ออบเจกต์ content.date มีการรองรับพร้อมอยู่ในผลิตภัณฑ์ โดยใช้พารามิเตอร์หลัก 2 รายการดังนี้ today และ now
ค่า today จะใช้เวลาปัจจุบันของเบราเซอร์ แปลงเป็นเวลาเที่ยงคืนของวันนี้ จากนั้นแปลงค่าเป็นเวลา UTC
{{#content.date}}today{{/content.date}} จะขยายเป็นค่าของเบราเซอร์สำหรับเวลาเที่ยงคืนของวันนี้ แปลงเป็นค่า UTC และจัดรูปแบบเป็นรูปแบบวันที่สำหรับ REST API ของเนื้อหา ตัวอย่างเช่น:
2220181008065959999
จากนั้นสามารถเสริมด้วย:
today +/- [day | week | month | year]
ค่า today จะทำงานแตกต่างกัน เมื่อคุณเพิ่มหรือลบค่า ถ้าคุณลบค่าออกจากเวลา ระบบจะใช้เวลาในตอนเช้า ถ้าคุณเพิ่มค่าในเวลา ระบบจะใช้เวลาเที่ยงคืน ตัวอย่างเช่น:
{{#content.date}}today - 1 day{{/content.date}} จะขยายเป็นเมื่อวาน ณ เวลาเริ่มต้นวัน
{{#content.date}}today + 2 days{{/content.date}} จะขยายเป็นวันหลังจากพรุ่งนี้เวลาเที่ยงคืน
ค่า now จะใช้เวลาปัจจุบันของเบราเซอร์ และแปลงเป็นเวลา UTC โดยไม่มีการปรับ
{{#content.date}}now{{/content.date}} จะขยายเป็นเวลาปัจจุบันของเบราเซอร์ แปลงเป็นค่า UTC และจัดรูปแบบเป็นรูปแบบวันที่สำหรับ REST API ของเนื้อหา
now สามารถเสริมด้วย hour เพื่อให้ได้:
now +/- [hour | day | week | month | year]
{{#content.date}}now + 2 hours{{/content.date}} - สองชั่วโมงนับจากขณะนี้ แปลงเป็นเวลา UTC โดยจัดรูปแบบเป็นรูปแบบวันที่สำหรับ REST API ของเนื้อหา
{{#content.date}}now - 1 day{{/content.date}} - เมื่อวานตามเวลาของเบราเซอร์นี้ แปลงเป็นเวลา UTC โดยจัดรูปแบบเป็นรูปแบบวันที่สำหรับ REST API ของเนื้อหา
การใช้รูปแบบคำสั่งขององค์ประกอบที่รองรับ
ในการใช้การขยายมาโครในสตริงการสืบค้นเพิ่มเติม สมมติว่าคุณต้องการแสดงผลข้อมูลทั้งหมดใน 3 สัปดาห์สุดท้าย คุณต้องป้อนข้อมูลต่อไปนี้
updatedDate gt "{{#code.date}}today - 3 weeks{{/code.date}}"
ระบบจะแสดงผลเฉพาะวันที่ หากต้องการทำงานกับการเรียก REST API ของเนื้อหา ให้เพิ่มเครื่องหมายคำพูดเมื่อคุณสร้างสตริงการสืบค้น เช่นเดียวกับเมื่อคุณป้อนค่าแบบสแตติก
MustacheJS
สำหรับรูปแบบคำสั่ง ให้อ้างอิงเพจของเทมเพลท Mustache JS ที่ mustache.github.io/mustache.5.html
มีการเปลี่ยนแปลงหนึ่งอย่างกับอินสแตนซ์ของ Mustache ที่รันเมื่อขยายสตริง Mustache มีทั้งการขยาย text ที่ใช้ {{ }} และการขยาย html ที่ใช้ {{{ }}} ความต่างระหว่างทั้งสองอย่างนี้คือ การขยายข้อความนั้นเข้ารหัส HTML กับสตริง กล่าวคือ ถ้าค่าขยายเป็น a < b ผลลัพธ์จะเป็น a < b ซึ่งไม่ใช่สิ่งที่คุณต้องการในการสร้างสตริงสำหรับ URL คุณสามารถแจ้งให้ผู้ใช้ใช้การขยาย HTML แต่จะทำให้เกิดภาระงานมากขึ้นและมีปัญหามากขึ้นด้วย เช่นการอธิบายว่าทำไมต้องใช้ {{{ }}}
เพื่อป้องกันปัญหานี้ Mustache มีการตั้งค่าเพื่อให้ไม่มีการยกเว้นค่าเมื่อใช้ {{ }} หมายความว่าทั้ง {{ }} และ {{{ }}} จะทำงานเหมือนกัน นอกจากนี้ยังทำให้การเข้ารหัสผลลัพธ์ใดๆ ก็ตามเป็นสิ่งที่ผู้ใช้ต้องดำเนินการเอง ถ้าจำเป็น
โมเดล OOTB Mustache
Mustache ต้องมีการใช้โมเดลกับเทมเพลทสำหรับการขยาย ในตัวอย่างก่อนหน้านี้ มีการกำหนด {{#content.date}} อยู่ในผลิตภัณฑ์แล้ว ในขณะที่ผู้พัฒนาสามารถเพิ่มคุณสมบัติใหม่ เช่น {{person}} ได้เอง ถ้าผู้ใช้ป้อนค่าในเทมเพลท Mustache ซึ่งไม่อยู่ในโมเดล ผลลัพธ์ที่ได้จะเป็นสตริงว่างเปล่า ดังนั้น ในกรณีของ Hello {{person}} ระบบจะขยายเป็นเพียง Hello ถ้าผู้พัฒนาไม่เพิ่ม person ในโมเดล
ออบเจกต์ของโมเดลที่ใช้เป็นออบเจกต์ร่วม เรียกว่า SCSMacros ผู้พัฒนาสามารถเพิ่มรายการอื่นๆ ในออบเจกต์นี้ได้ ระบบจะส่งออบเจกต์ไปยัง Mustache เมื่อประมวลผลเทมเพลท
ออบเจกต์ของโมเดลที่มาพร้อมผลิตภัณฑ์รองรับเฉพาะออบเจกต์ content.date เท่านั้นในขณะนี้
{
content: {
date: <lambda implementation>
}
}โมเดล Mustache ที่กำหนดเอง
ผู้พัฒนาสามารถปรับปรุงออบเจกต์ที่รองรับได้ตามความต้องการ โดยสามารถนำออบเจกต์ lastTwoDays มาใช้และทำให้การขยายเรียบง่ายขึ้น เป็นเพียง {{lastTwoDays}}
ในการขยายโมเดลให้รองรับการทำงาน เช่น Hello {{person}} ในตัวอย่างข้างต้น คุณต้องเพิ่มออบเจกต์ person ใน SCSMacros คุณต้องดำเนินการนี้ก่อนที่จะรันเพจ คุณสามารถทำได้ภายในเลย์เอาต์ของเพจ โดยเพิ่มแท็กของสคริปต์ที่ส่วนต้น ตัวอย่างเช่น:
<script type="text/javascript">
window.SCSMacros = window.SCSMacros || {}; // define/get the SCSMacros object
window.SCSMacros.person = "World";
</script>
หลังจากการเปลี่ยนแปลงนี้ เทมเพลท Hello {{person}} จะขยายเป็น: Hello World
ถ้าคุณต้องการส่งค่าไปยังออบเจกต์ (เช่น Hello {{#person}}personId{{/person}}) คุณจะต้องใช้งาน mustache lambda และแรปและขยายค่าภายในการใช้งานดังกล่าว
ตัวอย่างเช่น:
<script type="text/javascript">
window.SCSMacros = window.SCSMacros || {}; // define/get the SCSMacros object
//implement "person" as a lambda
window.SCSMacros.person = function () {
var people = { '111': { firstName: 'Small', lastName: 'World'}, '222': { firstName: 'Big', lastName: 'Universe'} };
return function (text, render) {
var expandedText = render(text);
var chosenPerson = people[expandedText] || people['111'];
return chosenPerson.firstName;
}
};
</script>
หลังจากเปลี่ยนแปลงแล้ว เทมเพลท Hello {{#person}}111{{/person}} จะขยายเป็น Hello Small และเทมเพลท Hello {{#person}}222{{/person}} จะขยายเป็น Hello Big
หมายเหตุ:
การขยายของ Mustache จะรันไปพร้อมกัน ถ้าคุณต้องการเรียกค่าแบบอะซิงโครนัส จะต้องแปลค่าภายในโมเดลก่อนที่จะรันการขยายของ Mustache ซึ่งขณะนี้ยังไม่มีการรองรับ แต่ปรับการใช้งานให้ตรงตามความต้องการเฉพาะตัวได้