W zapytaniach dotyczących listy zawartości można — aby wyświetlać ostatnio zaktualizowaną zawartość — definiować wartości właściwości, które są obliczane, gdy strona jest uruchamiana.
Większość właściwości składników serwisu jest statyczna. Użytkownik wybiera lub wprowadza ustaloną wartość dla jednej z właściwości składnika i wartość ta nie ulega zmianie bez względu na to, czy strona jest czy nie jest uruchomiona. Można jednak zdefiniować wartości właściwości, które to wartości są obliczane, gdy strona jest uruchamiana. Jest to przydatne do wyświetlania — w zapytaniach dotyczących zawartości — zawartości, która ostatnio została zaktualizowana. Użytkownicy mogą wówczas wprowadzać takie daty, jak "w ostatnich 3 dniach".
Rozszerzenie Mustache JS można wstawiać w wielu właściwościach. Wartości, do których występują odwołania, są wyprowadzane z modelu, który jest wykonywany w chwili uruchomienia strony. Gotowy do użycia model obsługuje daty sformatowane dla wywołań Content REST API. Model ten można rozbudować o dodatkowe wartości, tak aby spełniał specyficzne wymagania użytkowników.
Na przykład wartość napisowa, którą można wprowadzić dla właściwości, może mieć postać:
Content List component: Additional Query String property: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"
Ten odnoszący się do daty wpis Mustache będzie obliczany w trybie wykonawczym, a zatem zwracana wartość będzie się zmieniać w zależności od tego, kiedy nastąpiło uruchomienie (rozwija się do postaci updatedDate gt "2220181002060000000"
). W ten sposób użytkownik może skonstruować dowolną złożoną wartość napisową daty bez konieczności wprowadzania predefiniowanej wartości.
Obsługujące właściwości składników
Następujące właściwości obsługują składnię szablonu Mustache JS:
Lista zawartości
Dodatkowy napis-zapytanie
Na przykład: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"
Tytuł/akapit/tekst
Formatowany tekst wprowadzany za pomocą edytora CKEditor
Na przykład: "Format Content REST API dla daty: {{#content.date}}now{{/content.date}}"
Uwaga:
Bez własnego modelu dla szablonu Mustache, rozwijanie w tytułach/akapitach/tekście jest mało przydatne. Jest jednak bardzo przydatne do weryfikowania, czy to, co zostało wprowadzone w dodatkowym napisie-zapytaniu, będzie obliczane przy przełączaniu między trybem edycji a trybem widoku i czy będzie od razu widoczne.Obsługiwana składnia składników
Obiekt content.date
jest od razu obsługiwany. Przyjmuje dwa główne parametry: today
i now
.
Wartość today
przyjmuje bieżącą datę i godzinę z przeglądarki, przekształca tę wartość na dzisiejszą północ, a następnie tę wartość przekształca w godzinę UTC.
{{#content.date}}today{{/content.date}}
rozwija wartość z przeglądarki z dzisiejszą północ przekształconą w wartość UTC i sformatowaną do formatu daty Content REST API. Na przykład:
2220181008065959999
Następnie wartość tę można powiększyć o:
today +/- [day | week | month | year]
Wartość today
zachowuje się inaczej, gdy dni są do niej dodawane lub są od niej odejmowane. Jeśli dni są odejmowane, jest używana godzina poranna. Jeśli dni są dodawane, jest używana godzina o północy. Na przykład:
{{#content.date}}today - 1 day{{/content.date}}
rozwija się na "wczoraj, na początku dnia".
{{#content.date}}today + 2 days{{/content.date}}
rozwija się na "pojutrze o północy".
Wartość now
przyjmuje bieżącą datę i godzinę z przeglądarki i przekształca ją w godzinę UTC bez żadnych dostosowań.
{{#content.date}}now{{/content.date}}
rozwija bieżącą datę i godzinę z przeglądarki w wartość UTC sformatowaną do formatu daty Content REST API.
now
można także uzupełnić o hour
. Można użyć:
now +/- [hour | day | week | month | year]
{{#content.date}}now + 2 hours{{/content.date}}
— dwie godziny od teraz przekształcone w wartość UTC sformatowaną do formatu daty Content REST API.
{{#content.date}}now - 1 day{{/content.date}}
— wczoraj o teraźniejszej godzinie z przeglądarki przekształcone w wartość UTC sformatowaną do formatu daty Content REST API.
Korzystanie z obsługiwanej składni składników
Aby użyć rozwijania makra w dodatkowym napisie-zapytaniu i na przykład uzyskać wszystko z ostatnich trzech tygodni, można by użyć:
updatedDate gt "{{#code.date}}today - 3 weeks{{/code.date}}"
Aby zwrócona data działała w wywołaniu Content REST API, są do niej — gdy jest konstruowany napis-zapytanie — dodawane znaki cudzysłowu, tak jak miałoby to miejsce podczas wprowadzania wartości statycznej.
MustacheJS
Składnia szablonów Mustache JS jest opisana na stronie "mustache.github.io/mustache.5.html".
W instancji Mustache, uruchamianej w celu rozwijania wartości napisowych, trzeba dokonać jednej zmiany. Mustache udostępnia rozwinięcie text
, w którym są używane {{ }}
, oraz rozwinięcie html
, w którym są używane {{{ }}}
. Różnica między nimi polega na tym, że rozwinięcie "text" nie wprowadza kodowania HTML; oznacza to, że jeśli wartość jest rozwijana do a < b
, to wynikiem będzie a < b
. To nie jest oczekiwane podczas konstruowania napisów tworzących adresy URL. Można by poinformować użytkownika o konieczność stosowania rozwijania HTML, lecz zwiększyłoby to nakłady pracy i stworzyłoby dodatkowe problemy, takie jak wyjaśnienie, dlaczego trzeba używać znaków {{{ }}}
.
Aby tego uniknąć Mustache skonfigurowano tak, aby nie modyfikował wartości, gdy są używane {{ }}
. Oznacza to, że {{ }}
i {{{ }}}
działają identycznie. Wskutek tego może być wymagane dodatkowe kodowanie przez użytkownika.
Gotowy (standardowy) model Mustache
Do szablonu, aby nastąpiło rozwinięcie, trzeba zastosować model Mustache. W poprzednim przykładzie obiekt {{#content.date}}
jest od razu zdefiniowany, podczas gdy może okazać się konieczne dodanie — przez programistę — nowego obiektu, takiego jak {{person}}
. Jeśli użytkownik wprowadzi w szablonie Mustache wartość, której nie ma w modelu, to wynikiem będzie napis pusty. A zatem, jeśli programista nie doda obiektu person
do modelu, to Hello {{person}}
rozwinie się do samego Hello
.
Obiekt "model" jest używany jako obiekt globalny o nazwie SCSMacros
. Programista może dodawać do tego obiektu dowolne wpisy. Obiekt zostanie przekazany do systemu Mustache podczas przetwarzania szablonu.
Obecnie przez gotowy obiekt "model" jest obsługiwany tylko obiekt content.date
:
{ content: { date: <lambda implementation> } }
Niestandardowy model Mustache
Programista może wprowadzić dodatkowe obsługiwane obiekty, zgodnie z wymaganiami. Na przykład może wprowadzić obiekt lastTwoDays
i uprościć rozwijanie przez tylko {{lastTwoDays}}
.
Chcąc rozszerzyć model, tak aby obsługiwał na przykład Hello {{person}}
z poprzedniego przykładu, należy dodać do SCSMacros obiekt person
. Trzeba to zrobić przed uruchomieniem strony. Można to zrobić z układu strony, dodając na jego początku znacznik "script". Na przykład:
<script type="text/javascript"> window.SCSMacros = window.SCSMacros || {}; // define/get the SCSMacros object window.SCSMacros.person = "World"; </script>
Gdy zmiana ta zostanie dokonana, Hello {{person}}
rozwinie się do Hello World
.
Zamierzając przekazywać wartości do obiektu (na przykład Hello {{#person}}personId{{/person}}
), trzeba zaimplementować interfejs mustache lambda
, a następnie izolować i rozwijać wartość w obrębie tej implementacji.
Na przykład:
<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>
Gdy zmiana ta zostanie dokonana, szablon Hello {{#person}}111{{/person}}
rozwinie się do Hello Small
, a Hello {{#person}}222{{/person}}
— do Hello Big
.
Uwaga:
Rozwijanie Mustache jest wykonywane synchronicznie. Jeśli trzeba pobierać wartości asynchroniczne, należy je ustalać w obrębie modelu jeszcze przed próbą wykonania rozwinięcia Mustache, a to jeszcze nie jest obecnie obsługiwane, aczkolwiek są możliwe implementacje opracowywane na zamówienie.