ในการสืบค้นลิสต์เนื้อหา คุณสามารถกำหนดค่าสำหรับคุณสมบัติที่คำนวณเมื่อเพจทำงาน เพื่อแสดงเนื้อหาที่อัปเดตล่าสุด
คุณสมบัติส่วนใหญ่ของคุณสมบัติภายในไซต์เป็นแบบสแตติก ผู้ใช้จะเลือกหรือป้อนสตริงหรือค่าแบบคงที่สำหรับคุณสมบัติหนึ่งขององค์ประกอบ และจะไม่มีการเปลี่ยนแปลงไม่ว่าเพจจะทำงานเมื่อไหร่หรือที่ใดก็ตาม แต่คุณสามารถกำหนดค่าสำหรับคุณสมบัติที่คำนวณเมื่อเพจทำงาน คุณสมบัตินี้มีประโยชน์สำหรับการแสดงเนื้อหาที่เพิ่งอัปเดตล่าสุดในการสืบค้นเนื้อหา ผู้ใช้สามารถป้อนวันที่ เช่น "ใน 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 ซึ่งขณะนี้ยังไม่มีการรองรับ แต่ปรับการใช้งานให้ตรงตามความต้องการเฉพาะตัวได้