Tustena Liquid il markup facile per le stampe personalizzate
Liquid è un linquaggio per la definizione di markup facile per le configurazione di stampe personalizzate. Pur essendo di recente concezione si può ben considerare uno standard indistriale percui abbiamo deciso di essere tra i primi ad implementarlo in Tustena CRM.
In questa pagina trovate la spiegazione del funzionamento della sintassi generale e degli operatori disponibili; alla pagina
relativa agli esempi
Ci sono due tipi di markup in Liquid: Output e Tag.
Output
- stampa il testo inserito applicando eventuali filtri ed è incluso tra due graffe consecutive {{ testo da stampare }}
Per esempio le seguenti righe:
The word "tobi" in uppercase: {{ 'tobi' | upcase }}
The word "tobi" has {{ 'tobi' | size }} letters!
Change "Hello world" to "Hi world": {{ 'Hello world' | replace: 'Hello', 'Hi' }}
The date today is {{ now | date: 'yyyyMMdd' }}
daranno come risultato:
The word "tobi" in uppercase: TOBI
The word "tobi" has 4 letters!
Change "Hello world!" to "Hi world!": Hi world
The date today is (la data corrente)
I tag disponibili sono:
assign
- assegna un valore ad una variabilecapture
- cattura il testo contenuto nel blocco e lo assegna ad una variabilecase
- è lo standard case ... whencycle
- è utilizzato per ciclare dei valori all'interno di un loop (utile per alternare i colori ad ogni riga in una tabella)for
- il classico ciclo forif
- la codizione if/elseunless
- la codizione inversa di if/elseinclude
- include un altro template - {% include nomefile.html %}comment
- non stampa il contenutoifchanged
- è utilizzato all'interno di un loop per stampare solo se il dato è cambiato
Capture
Capture inserisce il risultato in una variabile senza stamparlo.
{% capture heading %}
Tustena is the best!
{% endcapture %}
...
<h1>{{ heading }}</h1>
Capture è utile per salvare il contenuto e utilizzarlo in seguito all'interno del template.
Assign
Assign assegna un valore ad una variabile.
{% assign foo = 'monkey' %}
{{ foo }}
Puoi utilizzare il valore in seguito nel template
Cycle
Cycle è normalmente utilizzato all'interno di un loop per alternare i valori, come i colori o le classi.
{% for item in items %}
<div class="{% cycle 'red', 'green', 'blue' %}"> {{ item }} </div>
{% end %}
il risultato è:
Item one
Item two
Item three
Item four
Item five
Case
Se va verificata più di una condizione usare il Case
{% case template %}
{% when 'index' %}
Welcome
{% when 'product' %}
{{ product.vendor | link_to_vendor }} / {{ product.title }}
{% else %}
{{ page_title }}
{% endcase %}
For
"For" cicla su un array o una collection.
Ci sono molte variabili utili da utilizzare all'interno del ciclo.
Basic usage:
{% for item in collection %}
{{ forloop.index }}: {{ item.name }}
{% endfor %}
Advanced usage:
{% for item in collection %}
<div {% if forloop.first %}class="first"{% endif %}>
Item {{ forloop.index }}: {{ item.name }}
</div>
{% endfor %}
Si può anche definire un limite e un offset come in SQL. Ricorda che l'offset inizia a 0 per il primo elemento.
{% for item in collection limit:5 offset:10 %}
{{ item.name }}
{% end %}
Per invertire il ciclo utilizzare
{% for item in collection reversed %}
Variabili disponibili:
forloop.name
'Il nome della collezione'forloop.length
La dimensione del loopforloop.index
La posizione corrente dell'elemento all'interno della collection; forloop.index inizia a 1.forloop.index0
La posizione corrente dell'elemento all'interno della collection dove il primo elemento inizia a 0.forloop.rindex
Numero di elementi che rimangono nel loop (length - index) dove 1 è l'ultimo.forloop.rindex0
Numero di elementi che rimangono nel loop dove 0 è l'ultimo.forloop.first
Restituisce true se è il primo elemento.forloop.last
Restituisce true se è l'ultimo elemento.
Uso di limit:
# array = [1,2,3,4,5,6]
{% for item in array limit:2 offset:2 %}
{{ item }}
{% endfor %}
# results in 3,4
Unless
Unless is a conditional just like 'if' but works on the inverse logic.
{% unless x < 0 %} x is greater than zero {% end %}
If
If e' un blocco condizionale
{% if user.admin %}
Admin user!
{% else %}
Not admin user
{% endif %}
There are {% if count < 5 %} less {% else %} more {% endif %} items than you need.
IfChanged
The ifchanged block tag is used within a loop. It checks its own rendered contents against its previous state and only displays its content if the value has changed.
For example, in order to show the date only when a post is published on a new day (always displaying the time):
{% ifchanged %}
<div class="date">{{ article.published_at | date: '%B %d' }}</div>
{% endifchanged %}
<div class="time">{{ article.published_at | date: '%I:%M %p' }}</div>
Tables
{% tablerow item in items cols: 3 limit: 12 %}
{{ item.variable }}
{% endtablerow %}
tablerowloop.length
quanti elementi ci sono nel looptablerowloop.index
la posizione nel loop correntetablerowloop.index0
la posizione nel loop corrente (zero based)tablerowloop.rindex
quanti elementi mancano?tablerowloop.rindex0
quanti elementi mancano? (zero based)tablerowloop.first
è il primo elemento?tablerowloop.last
è l'ultimo elemento?tablerowloop.col
indice della colonna nella riga correntetablerowloop.col0
indice della colonna nella riga corrente (zero based)tablerowloop.col_first
è la prima colonna della riga?tablerowloop.col_last
è l'ultima colonna della riga?
{% tablerow item in items cols: 3 %}
{% if col_first %}
First column: {{ item.variable }}
{% else %}
Different column: {{ item.variable }}
{% endif %}
{% endtablerow %}
I filtri implementati sono:date
- formatta la data con la sintassi .Netcapitalize
- Capitalizza tutte la paroledowncase
- converte il testo in minuscoloupcase
- converte il testo in maiuscolofirst
- restituisce il primo valore di un arraylast
- restituisce l'ultimo valore di un arrayjoin
- unisce gli elementi di un array intramezzando un caratteresort
- ordina gli elementi di un arraymap
-size
- restituisce la dimensione di un array di stringheescape
- l'escape di una stringescape_once
- esegue l'escape di una string html senza modificare gli elementi già convertiti.strip_html
- rimuove i tag html da una stringastrip_newlines
- rimuove gli 'a capo' (\n) da una stringanewline_to_br
- sostituisce gli 'a capo' (\n) con un break html
replace
- sostituisce ogni occorrenzareplace_first
- sostituisce la prima occorrenzaremove
- rimuove ogni occorrenzaremove_first
- rimuove la prima occorrenzatruncate
- tronca la stringa a n caratteritruncatewords
- tronca la stringa a n paroleprepend
- prepone alla stringa il valoreappend
- accoda alla stringa il valoreminus
- sottrae il valoreplus
- somma il valoretimes
- moltiplica il valoredivided_by
- divide il valore
Estensioni custom di Tustena:sum
- somma il valore considerando le come numeri e restituendo un valore decimalemultiply
- moltiplica il valore considerando le come numeri e restituendo un valore decimaledivide
- divide il valore considerando le come numeri e restituendo un valore decimalesubtract
- sottrae il valore considerando le come numeri e restituendo un valore decimaleformat_as_money
- formatta il dato numerico arrotondando al secondo decimaleempty_cell
- inserisce una cella vuota nel caso il risultato sia un valore nullosplit
- divide la stringa in due stringhe diviseformat_date
- formatta la stringa in formato datais_date
- verifica se la stringa è di tipo datachars
- conta il numero di caratterinewline_to_br
- nel caso di un campo testo con più righe, serve per mandare a capo come nella formattazione originale del testocapitalize_all
- restituisce la stringa in maiuscoloformat_as_percentage
- restituisce la stringa formattata in percentualeformat_discount_formula
-format_time
- formatta la stringa in formato oraformat_decimal
- formatta la stringa in formato decimale (con un numero decimali a piacere)default
- se la stringa da stampare risulta vuota, questo funzione stampa un valore predefinitoget_lead_cross_string
-discount
- ritorna la formula di sconto dell'oggettostr_len
- calcola la lunghezza della stringanow / tustena_now
- Restituisce la data odiernatustena_url
- Restituisce l'indirizzo di Tustena impostato nella chiave TustenaUrldel settings.config