Macro's uitvouwen in zoekvragen inhoudlijsten

In een zoekvraag voor inhoudlijst kunt u waarden definiëren voor eigenschappen die worden berekend wanneer een pagina wordt uitgevoerd, om inhoud weer te geven die recent is bijgewerkt.

De meeste eigenschappen voor componenten binnen sites zijn statisch. De gebruiker selecteert een vaste string of waarde of voert deze in voor een van de eigenschappen van de component, en die wijzigt niet, ongeacht wanneer en waar de pagina wordt uitgevoerd. U kunt echter waarden voor eigenschappen definiëren die worden berekend wanneer de pagina wordt uitgevoerd. Dit is handig voor de weergave van inhoud die recent is bijgewerkt in inhoudzoekvragen. Gebruikers kunnen datums invoeren zoals "in de afgelopen 3 dagen".

U kunt een Mustache JS-uitbreiding invoegen voor verscheidene eigenschappen. De waarden waarnaar wordt verwezen in deze strings worden afgeleid van een model dat wordt uitgevoerd wanneer de pagina wordt uitgevoerd. Datums die zijn opgemaakt voor Content REST-API-aanroepen worden met een kant-en-klaar model afgehandeld. U kunt dit model uitbreiden met aanvullende waarden om te voldoen aan gebruikersvereisten.

Een voorbeeld van de string die u kunt invoeren voor een eigenschap:

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

Deze Mustache-invoer voor de datum wordt tijdens runtime geëvalueerd zodat de geretourneerde waarde wordt gewijzigd, afhankelijk van wanneer deze wordt uitgevoerd (dat wil zeggen, deze vouwt uit naar updatedDate gt "2220181002060000000"). Op deze manier kan de gebruiker een complexe datumstring opbouwen in plaats van een vooraf gedefinieerde waarde te hoeven invoeren.

Ondersteunde componenteigenschappen

Mustache JS-sjabloonsyntaxis wordt ondersteund met de volgende eigenschappen:

  • Inhoudlijst

    • Aanvullende zoekvraagstring

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

  • Titel/alinea/tekst

    • Opgemaakte tekst ingevoerd via CKEditor

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

Opmerking:

Zonder een aangepast model voor de Mustache-sjabloon is de uitbreiding in 'Titel/alinea/tekst' niet zo nuttig. Het is echter erg handig voor het valideren van uw invoer in de aanvullende zoekvraagstring omdat deze wordt geëvalueerd terwijl u schakelt tussen bewerken en bekijken en onmiddellijk zichtbaar is.

Ondersteunde componentsyntaxis

Het object content.date wordt kant-en-klaar ondersteund. Hiervoor worden twee hoofdparameters gebruikt: today en now.

De waarde today gebruikt de huidige browsertijd, converteert deze naar middernacht vannacht en converteert deze waarde vervolgens naar UTC-tijd.

  • {{#content.date}}today{{/content.date}} wordt uitgevouwen naar de browserwaarde voor middernacht vannacht, geconverteerd naar de UTC-waarde en opgemaakt in de datumnotatie van de Content REST-API. Bijvoorbeeld:

    2220181008065959999
  • Deze kan vervolgens worden uitgebreid met:

    today +/-  [day | week | month | year]
  • De waarde today gedraagt zich ook anders als u erbij optelt of vanaf trekt. Als u er vanaf trekt, wordt de tijd in de ochtend gebruikt. Als u er bij optelt, wordt de tijd om middernacht gebruikt. Bijvoorbeeld:

    • {{#content.date}}today - 1 day{{/content.date}} wordt uitgevouwen naar gisteren aan het begin van de dag.

    • {{#content.date}}today + 2 days{{/content.date}} wordt uitgevouwen naar de dag na morgen om middernacht.

De waarde now gebruikt de huidige browsertijd en converteert deze naar UTC-time zonder enige correctie.

  • {{#content.date}}now{{/content.date}} wordt uitgevouwen naar de huidige browsertijd, geconverteerd naar de UTC-waarde en opgemaakt in de datumnotatie van de Content REST-API.

  • now kan ook worden uitgebreid met hour. Dus u hebt:

    now +/-  [hour | day | week | month | year]
  • Bijvoorbeeld:
    • {{#content.date}}now + 2 hours{{/content.date}}: twee uur vanaf nu geconverteerd naar UTC-tijd, opgemaakt in de datumnotatie van Content REST-API

    • {{#content.date}}now - 1 day{{/content.date}}: gisteren bij deze browsertijd geconverteerd naar UTC-tijd, opgemaakt in de datumnotatie van Content REST-API

De ondersteunde componentsyntaxis gebruiken

Als u de macro-uitbreiding in de aanvullende zoekvraagstring gebruikt en u wilt alles in de afgelopen 3 weken retourneren, voert u het volgende in:

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

Alleen de datum wordt geretourneerd, dus om te werken voor de Content REST-API-aanroep worden aanhalingstekens toegevoegd wanneer u de zoekvraagstring opstelt, net zoals wanneer u een statische waarde invoert.

MustacheJS

Voor syntaxis raadpleegt u de Mustache JS-sjabloonpagina's via mustache.github.io/mustache.5.html.

Eén wijziging is aangebracht in de Mustache-instance die wordt uitgevoerd bij het uitvouwen van strings. Mustache biedt zowel een text-uitbreiding waarvoor {{ }} wordt gebruikt als een html-uitbreiding waarvoor {{{ }}} wordt gebruikt. Het verschil tussen deze twee is dat de tekstuitbreiding een HTML-codering op de string uitvoert; dat wil zeggen, als de waarde wordt uitgevouwen naar a < b, dan zou het resultaat a &lt; b zijn. Dit is niet wat u wilt om strings voor URL's te maken. U kunt de gebruiker instrueren om de HTML-uitbreiding te gebruiken, maar dat is weer een extra actie en levert meer problemen op, zoals uitleggen waarom de gebruiker {{{ }}} moet gebruiken.

Om dit te vermijden is Mustache zo ingesteld dat waarden niet worden voorzien van een escape-teken wanneer {{ }} wordt gebruikt. Dit houdt in dat {{ }} en {{{ }}} zich hetzelfde gedragen. Hierdoor moet de codering van een resultaat door de gebruiker worden uitgevoerd als deze is vereist.

Het kant-en-klare Mustache-model

Voor Mustache moet een model op de sjabloon worden toegepast voor uitbreiding. In het voorgaande voorbeeld is {{#content.date}} al kant-en-klaar gedefinieerd, terwijl een nieuwe eigenschap, zoals {{person}}, kan worden toegevoegd door de ontwikkelaar. Als de gebruiker een waarde invoert in de Mustache-sjabloon die niet in het model staat, is het resultaat een lege string. Dus in het geval van Hello {{person}} zou dit worden uitgevouwen naar slechts Hello, tenzij de ontwikkelaar person aan het model toevoegt.

Het gebruikte modelobject is een algemeen object genaamd SCSMacros. De ontwikkelaar kan aanvullende invoergegevens aan dit object toevoegen. Het object wordt doorgegeven aan Mustache wanneer de sjabloon wordt geëvalueerd.

Met het kant-en-klare modelobject wordt momenteel alleen het object content.date ondersteund:

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

Aangepast Mustache-model

De ondersteunde objecten kunnen worden uitgebreid door de ontwikkelaar op basis van de vereisten. De ontwikkelaar kan een object lastTwoDays introduceren en de uitbreiding vereenvoudigen tot slechts {{lastTwoDays}}.

Als u het model wilt uitbreiden zodat zoiets als Hello {{person}} in het voorgaande voorbeeld wordt ondersteund, moet u het object person aan de SCSMacros toevoegen. U moet dit doen voordat de pagina wordt uitgevoerd. Dit kan worden gedaan binnen de paginalay-out door een scripttag aan het begin ervan toe te voegen. Bijvoorbeeld:

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

Nadat deze wijziging is aangebracht, wordt de sjabloon Hello {{person}} uitgevouwen naar: Hello World.

Als u waarden aan het object wilt doorgeven (bijvoorbeeld Hello {{#person}}personId{{/person}}), dan moet u een mustache lambda implementeren en de waarde laten teruglopen en uitvouwen binnen de implementatie.

Bijvoorbeeld:

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

Nadat deze wijziging is aangebracht, wordt de sjabloon Hello {{#person}}111{{/person}} uitgebreid naar Hello Small en de sjabloon Hello {{#person}}222{{/person}} wordt uitgevouwen naar Hello Big.

Opmerking:

Mustache-uitbreiding wordt synchroon uitgevoerd. Als u asynchrone waarden moet ophalen, moeten deze binnen het model worden opgelost voordat u probeert de Mustache-uitbreiding uit te voeren. Dit wordt momenteel niet ondersteund, hoewel op maat gemaakte implementaties mogelijk zijn.