擴充內容清單查詢巨集

您可以在內容清單查詢中,定義執行頁面時所計算特性的值,以顯示最近更新的內容。

網站內大多數的元件特性都是靜態的。由使用者選取或輸入元件任一特性的固定字串或值,而且無論頁面在何時何地執行都不會改變。但是,您可以定義執行頁面時所計算特性的值。這對於顯示內容查詢中最近更新的內容非常實用。使用者可以輸入日期,像是「過去 3 天內」。

您可以在數個特性中插入 Mustache JS 擴充。這些字串中參照的值衍生自頁面執行時所執行的模型。內建的模型可處理適用於 Content 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 輸入的 RTF 內容

    • 例如:"Content REST API format for date: {{#content.date}}now{{/content.date}}"

註:

若無 Mustache 樣板的自訂模型,標題/段落/文字的擴充就不是那麼實用。但是,對於驗證在「其他查詢字串」中輸入的內容卻是非常實用,因為當您在編輯與檢視之間切換時會進行評估,而且立即可以看見。

支援的元件語法

內建即支援 content.date 物件。此物件使用以下兩個主參數:todaynow

today 值採用目前的瀏覽器時間,將其轉換為今晚午夜,然後再將該值轉換為 UTC 時間。

  • {{#content.date}}today{{/content.date}} 會擴展為今晚午夜的瀏覽器值,轉換為 UTC 值並將格式設為 Content 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 值並將格式設定為 Content REST API 日期格式的目前瀏覽器時間。

  • now 也可以加入 hour。方式如下:

    now +/-  [hour | day | week | month | year]
  • 例如:
    • {{#content.date}}now + 2 hours{{/content.date}} - 從現在開始 2 小時,轉換為 Content REST API 日期格式的 UTC 時間

    • {{#content.date}}now - 1 day{{/content.date}} - 昨天的這個瀏覽器時間,轉換為 Content REST API 日期格式的 UTC 時間

使用支援的元件語法

若要在其他查詢字串中使用巨集擴充,假設要傳回過去 3 週的所有項目,可以輸入:

updatedDate gt "{{#code.date}}today - 3 weeks{{/code.date}}"

只會傳回日期,供用於 Content 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}} 為例,除非開發人員在模型中新增 person,否則只會擴展為 Hello

使用的模型物件是名為 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 SmallHello {{#person}}222{{/person}} 樣板則擴充至 Hello Big

註:

Mustache 擴充會同步執行。若您需要擷取非同步值,在您嘗試執行 mustache 擴充之前必須先在模型內解析這些值,雖然目前並不支援這麼做,但可以透過訂製實行來實現。