Makros in Inhaltslistenabfragen erweitern

In einer Inhaltslistenabfrage können Sie Werte für Eigenschaften definieren, die bei der Ausführung einer Seite berechnet werden, und so Inhalt anzeigen, der vor Kurzem aktualisiert wurde.

Die meisten Eigenschaften für Komponenten in Sites sind statisch. Benutzer wählen eine feste Zeichenfolge oder einen festen Wert für eine Eigenschaft der Komponente aus bzw. geben diese ein. Dieser Wert bleibt immer gleich, unabhängig davon, wann oder wo die Seite ausgeführt wird. Sie können allerdings Werte für Eigenschaften definieren, die bei der Ausführung der Seite berechnet werden. So können Sie Inhalt in Inhaltsabfragen anzeigen, der vor Kurzem aktualisiert wurde. Benutzer können Datumsangaben wie "in den letzten 3 Tagen" eingeben.

Sie können eine Mustache-JS-Erweiterung in mehrere Eigenschaften einfügen. Die in diesen Zeichenfolgen referenzierten Werte werden von einem Modell abgeleitet, das bei Ausführung der Seite ausgeführt wird. Ein Out-of-the-box-Modell verarbeitet für Content-REST-API-Aufrufe formatierte Datumsangaben. Dieses Modell können Sie durch zusätzliche Werte erweitern und so beliebige Benutzeranforderungen erfüllen.

Beispiel für eine Zeichenfolge, die Sie für eine Eigenschaft eingeben können:

Content List component:
      Additional Query String property:
             updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"

Dieser Mustache-Eintrag für das Datum wird zur Laufzeit ausgewertet, sodass der zurückgegebene Wert sich je nach Zeitpunkt der Ausführung ändert (d.h. er wird zu updatedDate gt "2220181002060000000" erweitert). So können Benutzer jede komplexe Datumszeichenfolge erstellen und müssen keinen vordefinierten Wert eingeben.

Unterstützte Komponenteneigenschaften

Die folgenden Eigenschaften unterstützen Mustache-JS-Vorlagensyntax:

  • Inhaltsliste

    • Zusätzliche Abfragezeichenfolge

    • Beispiel: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"

  • Titel/Absatz/Text

    • Über CKEditor eingegebener Rich Text

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

Hinweis:

Ohne ein benutzerdefiniertes Modell für die Mustache-Vorlage ist die Erweiterung unter "Titel/Absatz/Text" nicht besonders nützlich. Sie ist allerdings sehr nützlich für die Validierung des unter "Zusätzliche Abfragezeichenfolge" eingegebenen Textes, da dieser ausgewertet wird, wenn Sie zwischen Bearbeitung und Ansicht wechseln, und sofort sichtbar ist.

Unterstützte Komponentensyntax

Das content.date-Objekt wird out-of-the-box unterstützt. Es akzeptiert zwei Hauptparameter: today und now.

Der today-Wert konvertiert die aktuelle Browserzeit in Mitternacht desselben Tages und dann diesen Wert in UTC-Zeit.

  • {{#content.date}}today{{/content.date}} wird zum Browserwert für Mitternacht des aktuellen Tages erweitert, in den UTC-Wert konvertiert und im Datumsformat der Content-REST-API formatiert. Beispiel:

    2220181008065959999
  • Der Wert kann dann wie folgt ergänzt werden:

    today +/-  [day | week | month | year]
  • Das Verhalten des today-Wertes hängt davon ab, ob Sie Zeit dazu addieren oder davon subtrahieren. Wenn Sie von ihm subtrahieren, verwendet er die Zeit im Vormittag. Wenn Sie Zeit dazu addieren, verwendet er die Zeit um Mitternacht. Beispiel:

    • {{#content.date}}today - 1 day{{/content.date}} wird auf gestern am Anfang des Tages erweitert.

    • {{#content.date}}today + 2 days{{/content.date}} wird auf übermorgen um Mitternacht erweitert.

Der now-Wert konvertiert die aktuelle Browserzeit ohne Anpassung in UTC-Zeit.

  • {{#content.date}}now{{/content.date}} wird zur aktuellen Browserzeit erweitert, in den UTC-Wert konvertiert und im Datumsformat der Content-REST-API formatiert.

  • now kann auch durch hour ergänzt werden. Mögliche Ergänzungen:

    now +/-  [hour | day | week | month | year]
  • Beispiel:
    • {{#content.date}}now + 2 hours{{/content.date}}: Zwei Stunden ab jetzt wird in UTC-Zeit konvertiert und im Datumsformat der Content-REST-API formatiert

    • {{#content.date}}now - 1 day{{/content.date}}: Gestern zur gleichen Browserzeit wird in UTC-Zeit konvertiert und im Datumsformat der Content-REST-API formatiert

Unterstützte Komponentensyntax verwenden

Beispiel: Sie geben Folgendes ein, um mit der Makroerweiterung in der zusätzlichen Abfragezeichenfolge alles aus den letzten 3 Wochen zurückzugeben:

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

Dabei wird nur das Datum zurückgegeben. Für die Arbeit mit dem Content-REST-API-Aufruf werden also Anführungszeichen hinzugefügt, wenn Sie die Abfragezeichenfolge erstellen (wie bei der Eingabe eines statischen Wertes).

MustacheJS

Die Syntax finden Sie auf den Mustache-JS-Vorlagenseiten unter mustache.github.io/mustache.5.html.

Es wurde eine Änderung an der Mustache-Instanz vorgenommen, die beim Erweitern von Zeichenfolgen ausgeführt wird. Mustache stellt sowohl eine text-Erweiterung mit {{ }} als auch eine html-Erweiterung mit {{{ }}} bereit. Der Unterschied zwischen diesen beiden Erweiterungen besteht darin, dass die Texterweiterung HTML-Codierung mit der Zeichenfolge vornimmt. Wenn der Wert also zu a < b erweitert wird, lautet das Ergebnis a &lt; b. Das ist bei Zeichenfolgen für URLs nicht erwünscht. Sie können Benutzer auffordern, die HTML-Erweiterung zu verwenden. Das führt allerdings nur zu zusätzlichem Aufwand und weiteren Problemen. Z.B. müssten Sie erklären, warum Benutzer {{{ }}} verwenden sollen.

Um das zu vermeiden, wurde Mustache so eingerichtet, dass Werte bei Verwendung von {{ }} nicht maskiert werden. Das bedeutet, dass {{ }} und {{{ }}} dasselbe Verhalten aufweisen. Dabei wird außerdem jede Codierung von Ergebnissen gegebenenfalls als Übung den Benutzern überlassen.

Das OOTB-Mustache-Modell

Mustache erfordert ein Modell, um zur Erweiterung auf die Vorlage angewendet werden zu können. Im oben genannten Beispiel ist {{#content.date}} bereits out-of-the-box definiert, während eine neue Eigenschaft wie {{person}} vom Entwickler hinzugefügt werden kann. Wenn der Benutzer einen Wert in die Mustache-Vorlage eingibt, der nicht im Modell vorhanden ist, wird eine leere Zeichenfolge als Ergebnis zurückgegeben. Im Falle von Hello {{person}} wird der Wert nur auf Hello erweitert, es sei denn, der Entwickler fügt person dem Modell hinzu.

Das verwendete Modellobjekt ist ein globales Objekt namens SCSMacros. Der Entwickler kann diesem Objekt beliebige weitere Einträge hinzufügen. Das Objekt wird an Mustache übergeben, wenn die Vorlage ausgewertet wird.

Das Out-of-the-box-Modellobjekt unterstürzt derzeit nur das content.date-Objekt:

{   
   content: {
     date: <lambda implementation>
   }
}

Benutzerdefiniertes Mustache-Modell

Entwickler können die unterstützten Objekte je nach ihren Anforderungen erweitern. Sie können z.B. ein lastTwoDays-Objekt einführen und die Erweiterung auf nur {{lastTwoDays}} vereinfachen.

Zur Erweiterung des Modells für ein Element wie Hello {{person}} im oben genannten Beispiel müssen Sie das person-Objekt den SCSMacros hinzufügen. Diesen Schritt müssen Sie vor der Ausführung der Seite vornehmen. Dazu können Sie im Seitenlayout ein Skripttag am Anfang hinzufügen. Beispiel:

<script type="text/javascript">
window.SCSMacros = window.SCSMacros || {};  // define/get the SCSMacros object
window.SCSMacros.person = "World";
</script>

Nach dieser Änderung wird die Vorlage Hello {{person}} auf Hello World erweitert.

Wenn Sie Werte an das Objekt übergeben möchten (z.B. Hello {{#person}}personId{{/person}}), müssen Sie ein mustache lambda implementieren und den Wert in der Implementierung wrappen und erweitern.

Beispiel:

<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>

Nach dieser Änderung wird die Vorlage Hello {{#person}}111{{/person}} auf Hello Small und die Vorlage Hello {{#person}}222{{/person}} auf Hello Big erweitert.

Hinweis:

Die Mustache-Erweiterung wird synchron ausgeführt. Wenn Sie asynchrone Werte abrufen möchten, müssen diese im Modell aufgelöst werden, bevor Sie die Mustache-Erweiterung ausführen. Das wird derzeit allerdings nicht unterstützt, obwohl benutzerdefinierte Implementierungen möglich sind.