ขยายมาโครในการสืบค้นลิสต์เนื้อหา

ในการสืบค้นลิสต์เนื้อหา คุณสามารถกำหนดค่าสำหรับคุณสมบัติที่คำนวณเมื่อเพจทำงาน เพื่อแสดงเนื้อหาที่อัปเดตล่าสุด

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