Wstępne parsowanie pliku¶
Część konfiguracji przed właściwym użyciem przez silnik jest wstępnie parsowana. Ten proces może być kontrolowany przy użyciu dyrektyw preprocesora.
Dyrektywy parsowania¶
Dyrektywy warunkowe - @anyOf i @oneOf¶
Dopuszczalne sa następujące formaty dyrektywy:
- Pełna
{
"@anyOf|@oneOf": {
"items": [
{
"if": "reguła",
"content": "zawartość do wstawienia przy spełnieniu warunku"
}
],
"options": {
}
}
}
- Skrócona definicja
{
"@anyOf|@oneOf": [
{
"if": "reguła",
"content": "zawartość do wstawienia przy spełnieniu warunku"
}
],
}
W skróconej wersji nie jest możliwe przekazanie dodatkowych opcji.
@anyOf¶
Dyrektywa pozwala na zdefiniowane listy konfiguracji które mają być wybrane jeśli zostaną spełnione określone warunki.
Dodatkowe opcje:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
merge | Opcja określa czy przy kilku spełnionych warunkach ich zawartość ma był połączona | NIE | Domyślnie false |
@oneOf¶
Dyrektywa pozwala na wybranie wyłącznie jednego wariantu po spełnieniu warunku. Przy parsowaniu jeden warunek MUSI zostać spełniony, więc zalecane jest, aby ostatni warunek był określony przez wyrażenie true. Jeśli warunek zostanie spełniony parsowanie zostanie zatrzymane.
Poniższa tabela przedstawia najważniejsze różnice miedzy dyrektywami @oneOf i @anyOf:
@oneOf | @anyOf | |
---|---|---|
Przynajmniej jeden warunek musi zostać spełniony | Żaden warunek nie musi być spełniony | |
Maksymalnie jeden warunek może zostać spełniony | Wszystkie warunki mogą być spełnione | |
Parsowanie zostanie zatrzymane przy| pierwszym spełnionym warunku | Parsowanie zostanie zatrzymane po sprawdzeniu wszystkich warunków |
Jeśli reguła jest skomplikowana i składa sie z kilku warunków możliwy jest podział reguły na listę warunków:
{
"@anyOf|@oneOf": [
{
"if": [
{
"rule": "reguła1"
},
{
"rule": "reguła2",
"type": "OR/AND"
}
],
"content": "zawartość do wstawienia przy spełnieniu warunku"
}
],
}
Pętla - @repeat¶
Dyrektywa pozwala na cykliczne powielenie konfiguracji, przechodząc po kolekcji znajdującej się w kontekście silnika.
{
"@repeat": {
"var": "nazwa zmiennej pod którą biędzie dostępny obecny element",
"in": "kolekcja po której następuje iteracja",
"content": "zawartość do powielenia"
}
}
Przykład:
{
"@repeat": {
"var": "i",
"in": "testArray",
"content": "{{i.id}}"
}
}
Wyrażenia - expression¶
Dyrektywa pozwala na wstawienie wyniku wyrażenia lub zmiennych we wskazane miejsce. Wyrażenie MUSI być wstawione w postaci {{wyrażenie}}. W jednym polu może znajdować się wiele bloków wyrażeń.
Przykład:
{
"exp1" : "{{settings[0]}} {{settings[1]}}",
"exp2" : "{{settings[0] * settings[1]}}"
}
Jeśli wynikiem wyrażenia jest liczba lub typ logiczny i jest to jedyne wyrażenie w danym polu to wynik jest automatycznie przekonwertowany.
Przykład:
{
"exp1" : "{{1}}",
}
Wynikiem będzie:
{
"exp1" : 1,
}
Formatowanie - @formatter¶
Dyrektywa pozwala na przeformatowanie bloku konfiguracji z jednego typu na drugi.
{
"type": "typ konwertera",
"config": {
},
"value": {}
}
string¶
Konwersja do łańcucha znaków. Używane głównie przy dyrektywie @anyOf do generowania tekstu zależnie od warunków.
Opcje - config:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
concat | Łącznik fragmentów łańcucha | NIE |
{
"@formatter": {
"type": "string",
"config": {
"concat": " and "
},
"value": {
"@anyOf": [
{
"if": true,
"content": "Hello"
},
{
"if": true,
"content": "World"
}
]
}
}
}
Czego wynikiem będzie „Hello and World”.
Przetwarzanie szablonu TWIG - @twigRender¶
Dyrektywa pozwala na wstawienie wyniku parsowania zewnętrznego pliku Twig. Kontekstem parsowania pliku jest kontekstem preparsera.
{
"@twigRender": {
"file": "ścieżka do pliku relatywnie do system.json"
},
"options": {
}
}
Opcje - options:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
wrap | Pozwala na wstawienie tekstu przed i po wyniku parsowania twiga | NIE | Aby wstawić treść wygenerowana z szablonu twiga należy użyć {content} |
Przykład:
{
"@twigRender": {
"file": "twig/test.twig"
},
"options": {
"wrap": "<!- {content} -->"
}
}
Kontekst parsowania¶
Kontekst jest zbiorem zmiennych oraz funkcji które można użyć w powyższych dyrektywach. Dostępność niektórych zmiennych zależy od parsowanego fragmentu konfiguracji.
Funkcje pomocnicze - utils¶
Funkcje dostępne są w każdym parsowanym fragmencie
isEmpty¶
Sprawdzenie czy zmienna posiada wartość. Odpowiednik empty z języka PHP.
Zwracana wartość: Boolean
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
data | Zmienna do sprawdzenia | TAK |
Przykład:
{
"test": "{{utils.isEmpty(data)}}"
}
implode¶
Łączenie elementów w łańcuch znaków. Odpowiednik implode z języka PHP.
Zwracana wartość: String
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
data | Tablica elementów do złączenia | TAK | |
glue | Łącznik elementów | TAK |
Przykład:
{
"test": "{{utils.implode(', ', data)}}"
}
round¶
Zaokrąglenie liczby zmiennoprzecinkowej. Odpowiednik round z języka PHP.
Zwracana wartość: Float
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
val | Liczba do Zaokrąglenia | TAK | |
precision | Precyzja(liczba cyfr po przecinku) | NIE | Domyślnie 0 |
Przykład:
{
"test": "{{utils.round(price, 2)}}"
}
escape¶
Dekodowanie łańcucha znaków do postaci bezpiecznej do użycia w Twig
Zwracana wartość: String
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
str | Tekst do zdekodowania | TAK |
createDateTime¶
Tworzenie obiektu DateTime.
Zwracana wartość: DateTime
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
time | formuła dnia i godziny | NIE | Domyślnie „now”. Zgodnie z formatem |
timezone | Formuła strefy czasowej lub przesunięcie(np. +0200) | NIE | Domyślnie null. Zgodnie z strefami |
Przykład:
{
"test": "{{utils.createDateTime('2019-12-06 12:00:00').getTimeStamp()}}"
}
includes¶
Sprawdzenie czy jakiś tekst występuje w innym. Odpowiednik strpos z języka PHP.
Zwracana wartość: Boolean
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
str | Tekst w którym następuje wyszukiwanie | TAK | |
substring | Tekst do wyszukania | TAK |
Przykład:
{
"test": "{{utils.includes('Hello World', 'Hello')}}"
}
replace¶
Zamiana tekstu na inny. Odpowiednik str_replace z języka PHP.
Zwracana wartość: String
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
search | Tekst lub tablica do wyszukania | TAK | |
replace | Tekst lub tablica na które ma być dokonana zmiana | TAK | |
subject | Tekst w którum następuje wyszukiwanie | TAK |
Przykład:
{
"test": "{{utils.includes('World', 'Universe', 'Hello World')}}"
}
arrayFilter¶
Filtrowanie elementów po przekazanych parametrach
Zwracana wartość: Array
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
input | Tablica wejściowa | TAK | |
params | Obiekt parametrów filtra lub JSON tego obiektu | TAK |
Przykład:
{
"test": "{{utils.arrayFilter(data, '{\"param\": \"val\"}'}}"
}
arrayColumn¶
Zwraca tablicę z wartościami z wskazanej kolumny. Odpowiednik array_column z PHP.
Zwracana wartość: Array
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
input | Tablica wejściowa | TAK | |
param | Klucz/kolumna która ma być zwrócona | TAK |
Przykład:
{
"test": "{{utils.arrayColumn(data, 'param')}}"
}
Parametry konta - session¶
Treści - contentRepository¶
Pobranie treści z systemu.
{
"test": "{{contentRepository.getContent('typTreści', identyfikator)}}"
}
Dostępne treści
- personalization - szablon personalizacji
- webPushTemplate - szablon powiadomienia push
- staticContent - treść statyczna
Przykład:
{
"test": "{{contentRepository.getContent('webPushTemplate', 1).getTitle()}}"
}
mediaHelper¶
generatePublicUrl¶
Pozwala na wygenerowanie publicznego url do określonego zasobu
Parametry:
Parametr | Opis | Wymagane | Uwagi |
---|---|---|---|
hubId | Identyfikator konta w systemie | TAK | |
media | Obiekt zasobu | TAK | |
type | Typ zasobu | NIE | Domyślnie reference |
absolute | Czy ścieżka ma być pełna | NIE | Domyślnie: true |
Przykład:
{
"test": "{{mediaHelper.generatePublicUrl(session.hubId, notification.icon}"
}