コンテンツ・リスト問合せ内で、ページの実行時に計算されるプロパティの値を定義し、最近更新されたコンテンツを表示できます。
サイト内のコンポーネントのほとんどのプロパティは静的です。ユーザーは、コンポーネントのプロパティの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
オブジェクトは、すぐに使用可能なオブジェクトとしてサポートされています。これには、today
とnow
という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 < 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拡張機能を実行しようとする前にこれらの値をモデル内で解決する必要があり、これは現在サポートされていません。ただし、特別注文の実装は可能です。