コンテンツ・リスト問合せのマクロの展開

コンテンツ・リスト問合せ内で、ページの実行時に計算されるプロパティの値を定義し、最近更新されたコンテンツを表示できます。

サイト内のコンポーネントのほとんどのプロパティは静的です。ユーザーは、コンポーネントのプロパティの1つに固定文字列または値を選択または入力しますが、これは、ページがいつどこで実行されるかとは関係なく変更されません。ただし、ページの実行時に計算されるプロパティの値は定義できます。これは、コンテンツ問合せで最近更新されたコンテンツを表示する際に役に立ちます。ユーザーは引き続き、「過去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を介して入力されたリッチ・テキスト

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

注:

Mustacheテンプレートのカスタム・モデルがない場合、タイトル/段落/テキスト内の拡張機能はそれほど役に立ちません。ただし、追加問合せ文字列に入力内容を確認することは非常に有効です。なぜなら、編集と表示を切り替えるときに評価され、即時表示されるからです。

サポートされているコンポーネント構文

content.dateオブジェクトは、すぐに使用可能なオブジェクトとしてサポートされています。これには、todaynowという2つのメイン・パラメータが採用されます。

today値は、現在のブラウザ時間を採用し、本日の午前零時に変換し、この値をUTC時間に変換します。

  • {{#content.date}}today{{/content.date}}は、本日の午前零時のブラウザ時間に拡張され、UTC値に変換され、コンテンツREST API日付フォーマットに設定されます。例:

    2220181008065959999
  • これは、次によって補強できます:

    today +/-  [day | week | month | year]
  • today値はまた、加算または減算を行うと動作が変化します。減算すると、朝の時間が使用されます。加算すると、午前零時の時間が使用されます。例:

    • {{#content.date}}today - 1 day{{/content.date}}の場合、昨日の1日の始まりまで拡張されます。

    • {{#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}} - 現在から2時間後で、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.github.io/mustache.5.htmlにあるMustache JSテンプレート・ページを参照してください。

文字列の拡張時に実行されるMustacheインスタンスに1つの変更が行われています。Mustacheには、{{ }}を使用するtext拡張機能と{{{ }}}を使用するhtml拡張機能の両方が用意されています。これらの2つの違いは、テキスト格納機能では文字列に対して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 Smallに拡張され、Hello {{#person}}222{{/person}}テンプレートはHello Bigに拡張されます。

注:

Mustache拡張機能は同期して実行されます。非同期値を取得する必要がある場合、Mustache拡張機能を実行しようとする前にこれらの値をモデル内で解決する必要があり、これは現在サポートされていません。ただし、特別注文の実装は可能です。