Rozšíření maker v dotazech na seznam obsahu

V dotazu na seznam obsahu můžete definovat hodnoty vlastností, které se vypočítají po spuštění stránky, aby se zobrazil nedávno aktualizovaný obsah.

Většina vlastností komponent v rámci webů je statická. Uživatel vybere nebo zadá pevně stanovený řetězec nebo pevnou hodnotu pro jednu z vlastností komponenty a tento řetězec nebo hodnota se nebude měnit bez ohledu na to, kdy a kde je stránka spuštěna. Můžete však definovat hodnoty vlastností, které se vypočítají po spuštění stránky. To je užitečné pro zobrazování obsahu, který byl nedávno aktualizován v dotazech na obsah. Uživatelé mohou zadávat kalendářní data, například „za poslední 3 dny“.

Do několika vlastností můžete vložit rozšíření Mustache JS. Hodnoty odkazované v těchto řetězcích jsou odvozeny z modelu, který je proveden po spuštění stránky. Předem definovaný model připravený k okamžitému použití zpracovává kalendářní data formátovaná pro volání rozhraní REST API pro obsah. Tento model můžete rozšířit dalšími hodnotami, abyste splnili všechny požadavky uživatelů.

Následuje příklad řetězce, který můžete zadat pro vlastnost:

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

Tato položka systému Mustache pro kalendářní datum bude vyhodnocována za běhu tak, aby se vrácená hodnota měnila v závislosti na tom, kdy došlo ke spuštění (takže se upraví na tvar updatedDate gt "2220181002060000000"). Tímto způsobem může uživatel vytvořit libovolný složený řetězec kalendářního data, místo aby musel zadat předem definovanou hodnotu.

Podporované vlastnosti komponent

Následující vlastnosti podporují syntaxi šablon Mustache JS:

  • Seznam obsahu

    • Doplňkový řetězec dotazu

    • Například: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"

  • Nadpis/Odstavec/Text

    • Formátovaný text zadaný prostřednictvím editoru CKEditor

    • Například: "Formát pro kalendářní data rozhraní REST API pro obsah: {{#content.date}}now{{/content.date}}"

Poznámka:

Bez vlastního modelu pro šablonu systému Mustache není rozšíření komponenty nadpis/odstavec/text tak užitečné. Je však velmi užitečné pro ověření řetězce, který zadáte jako doplňkový řetězec dotazu, protože bude vyhodnocen, jakmile přepnete mezi úpravami a zobrazením, a bude okamžitě viditelný.

Podporovaná syntaxe komponent

Objekt content.date je podporován hned od začátku. Projeví se ve dvou hlavních parametrech, todaynow.

Hodnota today převezme aktuální čas prohlížeče, převede jej na půlnoc aktuálního dne a poté tuto hodnotu převede na univerzální koordinovaný čas (UTC).

  • {{#content.date}}today{{/content.date}} se rozbalí na hodnotu prohlížeče pro půlnoc aktuálního dne, převedenou na hodnotu univerzálního koordinovaného času (UTC) ve formátu kalendářního data rozhraní REST API pro obsah. Například:

    2220181008065959999
  • Následně může být hodnota rozšířena pomocí:

    today +/-  [day | week | month | year]
  • Hodnota today se také chová odlišně, když k ní přičítáte nebo od ní odečítáte. Pokud od ní odečítáte, použije se ranní čas. Pokud k ní ale přičítáte, použije se půlnoční čas. Například:

    • {{#content.date}}today - 1 day{{/content.date}} se rozbalí na začátek včerejšího dne.

    • {{#content.date}}today + 2 days{{/content.date}} se rozbalí na pozítří o půlnoci.

Hodnota now převezme aktuální čas prohlížeče a převede jej na univerzální koordinovaný čas (UTC) bez jakýchkoli úprav.

  • {{#content.date}}now{{/content.date}} se rozbalí na aktuální čas prohlížeče převedený na hodnotu univerzálního koordinovaného času (UTC) ve formátu kalendářního data rozhraní REST API pro obsah.

  • Hodnotu now lze také zvýšit pomocí hodnoty hour. Tím získáte:

    now +/-  [hour | day | week | month | year]
  • Například:
    • {{#content.date}}now + 2 hours{{/content.date}} – o dvě hodiny více, než je aktuální čas převedený na univerzální koordinovaný čas (UTC) ve formátu kalendářního data rozhraní REST API pro obsah

    • {{#content.date}}now - 1 day{{/content.date}} – včera v tento čas prohlížeče převedený na univerzální koordinovaný čas (UTC) ve formátu kalendářního data rozhraní REST API pro obsah

Používání podporované syntaxe komponent

Pro ukázku použití rozšíření makra v doplňkovém řetězci dotazu předpokládejme, že jste chtěli vrátit vše za poslední 3 týdny. V takovém případě je třeba zadat následující:

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

Dotaz vrátí pouze datum, takže k zajištění správného fungování při volání rozhraní REST API pro obsah jsou při sestavování řetězce dotazu přidány uvozovky, jako kdybyste zadávali statickou hodnotu.

MustacheJS

Informace o syntaxi naleznete na stránkách šablon Mustache JS na adrese mustache.github.io/mustache.5.html.

V instanci systému Mustache spuštěné při rozšiřování řetězců byla provedena jedna změna. Systém Mustache poskytuje jak rozšíření text, které používá syntaxi {{ }}, tak rozšíření html, které používá syntaxi {{{ }}}. Rozdíl mezi těmito dvěma rozšířeními spočívá v tom, že rozšíření textu používá pro řetězec kódování HTML, takže pokud se hodnota rozšíří na a < b, bude výsledkem a &lt; b. To však není vhodné pro vytváření řetězců pro adresy URL. Mohli byste požádat uživatele, aby používal rozšíření HTML, ale tím byste pouze zvýšili režijní náklady a způsobili další komplikace, například vysvětlení, proč musí používat syntaxi {{{ }}}.

Z tohoto důvodu byl systém Mustache nastaven tak, aby při použití syntaxe {{ }} neprovedl uvození proměnných. To znamená, že se syntaxe {{ }}{{{ }}} chovají stejně. Pokud je vyžadováno kódování výsledků, zůstává tak úkolem pro uživatele.

Model OOTB Mustache

Systém Mustache vyžaduje, aby byl pro rozšíření aplikován model na šablonu. V předcházejícím příkladu je vlastnost {{#content.date}} definována již předem, zatímco vývojář může přidat novou vlastnost, jako je {{person}}. Pokud uživatel zadá do šablony Mustache hodnotu, která není obsažena v modelu, bude výsledkem prázdný řetězec. V případě šablony Hello {{person}} tak dojde k rozbalení na pouhé Hello , pokud vývojář nepřidá do modelu vlastnost person.

Použitý objekt modelu je globální objekt s názvem SCSMacros. Vývojář může do tohoto objektu bez omezení přidat jakékoli další položky. Po vyhodnocení šablony bude objekt předán do systému Mustache.

Předem definovaný objekt modelu v současné době podporuje pouze objekt content.date:

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

Vlastní model Mustache

Podporované objekty mohou být vývojářem vylepšeny na základě jejich požadavků. Lze tedy zavést objekt lastTwoDays a zjednodušit rozšíření pouze na {{lastTwoDays}}.

Chcete-li rozšířit model tak, aby podporoval něco podobného, jako je výraz Hello {{person}} v předchozím příkladu, bude nutné přidat objekt person do globálního objektu SCSMacros. Tento krok je třeba učinit před spuštěním stránky. Lze jej provést v rámci rozvržení stránky přidáním tagu skriptu na začátek. Například:

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

Po provedení této změny se šablona Hello {{person}} rozbalí na: Hello World.

Pokud chcete předat hodnoty do objektu (například Hello {{#person}}personId{{/person}}), musíte implementovat mustache lambda a zabalit a rozbalit hodnotu v rámci implementace.

Například:

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

Po provedení této změny se šablona Hello {{#person}}111{{/person}} rozbalí na Hello Small a šablona Hello {{#person}}222{{/person}} se rozbalí na Hello Big.

Poznámka:

Rozšíření šablony Mustache se provede synchronně. Pokud potřebujete načíst asynchronní hodnoty, musíte to vyřešit v rámci modelu ještě předtím, než se pokusíte provést rozšíření šablony Mustache, a to v současné době není podporováno, ačkoli jsou možné zakázkové implementace.