Expanzia makier v dopytoch na zoznam obsahu

V dopyte na zoznam obsahu môžete definovať hodnoty vlastností, ktoré sa vypočítajú pri spustení stránky, aby sa zobrazil nedávno aktualizovaný obsah.

Väčšina vlastností komponentov v rámci lokalít je statická. Používateľ vyberie alebo zadá pevný reťazec alebo hodnotu pre jednu z vlastností komponentu a tá sa nemení bez ohľadu na to, kedy alebo kde je stránka spustená. Môžete ale definovať hodnoty vlastností, ktoré sa vypočítajú pri spustení stránky. To je užitočné na zobrazovanie nedávno aktualizovaného obsahu v dopytoch na obsah. Používatelia môžu zadať dátumy, napríklad "posledné 3 dni".

Do niektorých vlastností môžete vložiť rozšírenie Mustache JS. Hodnoty, na ktoré sa odkazuje v týchto reťazcoch, sú odvodené z modelu, ktorý sa spracováva pri spustení stránky. Prednastavený model spracuje dátumy naformátované pre volania rozhrania Content REST API. Tento model môžete rozšíriť o ďalšie hodnoty podľa požiadaviek používateľov.

Toto je príklad reťazca, ktorý môžete zadať pre vlastnosť:

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

Táto položka Mustache pre dátum bude vyhodnotená v čase behu, aby sa vrátená hodnota menila podľa toho, kedy je spustená (to znamená, že sa rozšíri na updatedDate gt "2220181002060000000"). Takto môže používateľ vytvoriť ľubovoľný komplexný reťazec dátumu namiesto zadávania preddefinovanej hodnoty.

Podporované vlastnosti komponentov

Nasledujúce vlastnosti podporujú syntax šablóny Mustache JS:

  • Zoznam obsahu

    • Ďalší reťazec dopytu

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

  • Nadpis/odsek/text

    • Formátovaný text zadaný pomocou editora CKEditor

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

Poznámka:

Bez vlastného modelu pre šablónu Mustache nie je rozšírenie Nadpis/odsek/text až také užitočné. Je však veľmi užitočné na overovanie obsahu, ktorý zadáte v ďalšom reťazci dopytu, pretože ten sa bude vyhodnocovať pri prepínaní medzi úpravami a zobrazením a bude okamžite viditeľný.

Podporovaná syntax komponentov

Objekt content.date je podporovaný na základe predvoleného nastavenia. Používa dva hlavné parametre: today a now.

Hodnota today používa aktuálny čas prehľadávača a skonvertuje ho na čas dnešnej polnoci a túto hodnotu ďalej skonvertuje na čas UTC.

  • Hodnota {{#content.date}}today{{/content.date}} sa rozšíri na hodnotu času prehľadávača pre polnoc dnešného dňa, ktorá sa skonvertuje na hodnotu UTC a bude vo formáte dátumu rozhrania Content REST API. Príklad:

    2220181008065959999
  • Túto hodnotu je potom možné zmeniť takto:

    today +/-  [day | week | month | year]
  • Hodnota today sa chová odlišne pri pripočítaní a odpočítaní hodnoty. Ak od nej odpočítavate, použije sa ranný čas. Ak k nej pripočítavate, použije sa čas o polnoci. Príklad:

    • {{#content.date}}today - 1 day{{/content.date}} sa rozšíri na včerajšok na začiatok dňa.

    • {{#content.date}}today + 2 days{{/content.date}} sa rozšíri na pozajtra o polnoci.

Hodnota now použije aktuálny čas prehľadávača a skonvertuje ho na čas UTC bez ďalších úprav.

  • Hodnota {{#content.date}}now{{/content.date}} sa rozšíri na hodnotu času prehľadávača, ktorá sa skonvertuje na hodnotu UTC a bude vo formáte dátumu rozhrania Content REST API.

  • Hodnotu now je možné upraviť aj pomocou hodnoty hour. Výsledkom bude:

    now +/-  [hour | day | week | month | year]
  • Príklad:
    • {{#content.date}}now + 2 hours{{/content.date}} - dve hodiny odteraz skonvertované na čas UTC vo formáte dátumu rozhrania Content REST API

    • {{#content.date}}now - 1 day{{/content.date}} - včera v tomto čase prehľadávača skonvertovanom na čas UTC vo formáte času rozhrania Content REST API

Používanie podporovanej syntaxe komponentov

Ak chcete v ďalšom reťazci dopytu použiť expanziu makra, pričom chcete vrátiť všetko za posledné tri týždne, mali by ste zadať toto:

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

Vráti sa len dátum, preto sa pri vytváraní reťazca dopytu pridajú úvodzovky, podobne ako pri zadávaní statickej hodnoty, aby bolo možné pracovať s volaním rozhrania Content REST API.

MustacheJS

Informácie o syntaxi nájdete na stránkach šablóny Mustache JS: mustache.github.io/mustache.5.html.

V inštancii Mustache, ktorá sa spustí pri rozširovaní reťazcov, bola uskutočnená jedna zmena. Mustache poskytuje rozšírenie text, ktoré používa {{ }}, aj rozšírenie html, ktoré používa {{{ }}}. Rozdiel medzi nimi je v tom, že textové rozšírenie vykoná HTML kódovanie reťazca, to znamená, že ak je hodnota rozšírená na a < b, výsledok bude a &lt; b. Toto ale nie je spôsob, ako by ste chceli vytvárať reťazce pre adresy URL. Používateľov by ste mohli inštruovať, aby používali rozšírenie HTML, ale to by znamenalo prácu navyše a spôsobovalo by to ďalšie problémy. Museli by ste im napríklad vysvetliť, prečo je potrebné používať {{{ }}}.

Aby ste sa tomu vyhli, šablóna Mustache je nastavená tak, aby zátvorky {{ }} pre hodnoty nefungovali ako únikový znak. To znamená, že zátvorky {{ }} aj {{{ }}} sa správajú rovnako. Toto umožňuje ponechať kódovanie ľubovoľného výsledku ako cvičenie pre používateľa, ak je potrebné.

Preddefinovaný model Mustache

Mustache pre rozšírenie vyžaduje, aby sa v šablóne používal model. V predchádzajúcom príklade bola vlastnosť {{#content.date}} už preddefinovaná, zatiaľ čo novú vlastnosť, napríklad {{person}}, môže pridať vývojár. Ak používateľ zadá do šablóny Mustache hodnotu, ktorá sa v modeli nenachádza, výsledkom bude prázdny reťazec. Takže šablóna Hello {{person}} by sa rozšírila iba na Hello, pokiaľ vývojár nepridá do modelu vlastnosť person.

Použitý objekt modelu je globálny objekt nazývaný SCSMacros. Vývojár môže do tohto objektu pridať ľubovoľné ďalšie položky. Objekt bude odovzdaný do šablóny Mustache počas vyhodnocovania šablóny.

Preddefinovaný objekt modelu momentálne podporuje len objekt content.date:

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

Vlastný model Mustache

Podporované objekty môže doplniť vývojár podľa vlastných potrieb. Môže pridať objekt lastTwoDays a zjednodušiť tak rozšírenie len na {{lastTwoDays}}.

Ak chcete rozšíriť model, aby podporoval napríklad Hello {{person}} z predchádzajúceho príkladu, je potrebné pridať objekt person do globálneho objektu SCSMacros. Toto je potrebné vykonať ešte pred spustením stránky. Môžete to spraviť v rozložení stránky tak, že na jej začiatok pridáte značku skriptu. Príklad:

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

Po vykonaní tejto zmeny sa šablóna Hello {{person}} rozšíri na: Hello World.

Ak chcete do objektu odovzdať hodnoty (napríklad Hello {{#person}}personId{{/person}}), je potrebné implementovať mustache lambda a v rámci implementácie hodnotu zbaliť a rozbaliť.

Prí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 vykonaní tejto zmeny sa šablóna Hello {{#person}}111{{/person}} rozšíri na Hello Small a šablóna Hello {{#person}}222{{/person}} sa rozšíri na Hello Big.

Poznámka:

Rozšírenie Mustache sa spúšťa synchrónne. Ak potrebujete vyvolať asynchrónne hodnoty, tie bude potrebné spracovať v rámci modelu ešte pred pokusom o spustenie rozšírenia Mustache, čo momentálne nie je podporované, aj keď sú možné implementácie na mieru.