> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.crmincloud.it/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Guida a Liquid - template e newsletter dinamiche in stampa unione

**Liquid** è un _metalinguaggio_ per creare contenuti dinamici all’interno di email e stampe del CRM ideato per il motore di e-commerce [Shopify](https://shopify.dev/docs/api/liquid)).

Esistono due tipi di markup in Liquid: **output** e i **tag**.

Output markup (che si traduce nel testo corrispondente) è racchiuso tra graffe

`{{ nomeutente }}`

Tag markup (che è un commando) è racchiuso tra graffe e parentesi

`{% if <CONDITION> %} ... {% endif %}`

### Output

Le espressioni sono affermazioni che hanno dei valori. I template scritti in Liquid possono usare le espressioni in diversi punti; più spesso nelle istruzioni di output, ma anche come argomenti per alcuni tag o filtri.

Senza entrare in esempi troppo complicati, vediamo come gestire _Variabili, Stringe e interi_.

Un esempio di stringa è:

`Ciao {{ 'Utente' }}`

Chiaramente questo esempio è poco utile perchè stamperà

**Ciao Utente**

ma fa capire come funziona il linguaggio. Ad esempio se utilizziamo una variabile invece:

`Ciao {{ Name }}`

il sistema cercherà la variabile name nella rubrica e stamperà

**Ciao Stefano**

E' poi possibile applicare dei filtri alle variabili concatenandole con il simboolo **|** (pipe). Eventuali parametri vanno inseriti dopo i **:** (duepunti). 
Ad esempio:

`{{ now | date: 'yyyy' }}` => **2020**
`{{ name | default: 'ignoto' }}` => **Stefano** o se non definito (vuoto) **ignoto** 
`Ciao {{ 'Utente' | upcase }}` => **UTENTE**
`{{ 'buon' | append:'giorno' }}` => **buongiorno**

e così via. I filtri supportati sono molti, ma riportiamo in fondo alla guida quelli più utilizzati.

### Tag

I tag vengono utilizzati per la logica nel vostro template. 

```{% if name == 'stefano' %}
  Benvenuto Comandante
{% else %}
  Benvenuto utente
{% endif %}
```
Di solito le condizioni sono sufficienti per l'uso quotidiano, comunque sono state implementate tutte le logiche del linguaggio _Liquid_:

_assign_ - assegna un valore ad una variabile
_capture_ - cattura il testo contenuto nel blocco e lo assegna ad una variabile
_case_ - è lo standard case ... when
_cycle_ - è 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 for
_if_ - la codizione if/else
_unless_ - la codizione inversa di if/else
_include_ - include un altro template - {% include nomefile.html %}
_comment_ - non stampa il contenuto
_ifchanged_ - è utilizzato all'interno di un loop per stampare solo se il dato è cambiato

Maggiori dettagli nella [guida originale](https://github.com/Shopify/liquid/wiki/Liquid-for-Designers).

#### Filtri

I filtri implementati sono:

__date__ - formatta la data con la [sintassi .Net](http://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx) 
__capitalize__ - Capitalizza tutte la parole
__downcase__ - converte il testo in minuscolo
__upcase__ - converte il testo in maiuscolo
__first__ - restituisce il primo valore di un array
__last__ - restituisce l'ultimo valore di un array
__join__ - unisce gli elementi di un array intramezzando un carattere
__sort__ - ordina gli elementi di un array
__map__ -mappa un array su una specifica propietà
__size__ - restituisce la dimensione di un array di stringhe
__escape__ - l'escape di una string
__escape_once__ - esegue l'escape di una string html senza modificare gli elementi già convertiti.
__strip_html__ - rimuove i tag html da una stringa
__strip_newlines__ - rimuove gli 'a capo' (\n) da una stringa
__newline_to_br__ - sostituisce gli 'a capo' (\n) con un break html
__replace__ - sostituisce ogni occorrenza
__replace_first__ - sostituisce la prima occorrenza
__remove__ - rimuove ogni occorrenza
__remove_first__ - rimuove la prima occorrenza
__truncate__ - tronca la stringa a n caratteri
__truncatewords__ - tronca la stringa a n parole
__prepend__ - prepone alla stringa il valore
__append__ - accoda alla stringa il valore
__minus__ - sottrae il valore
__plus__ - somma il valore
__times__ - moltiplica il valore
__divided_by__ - divide il valore
__sum__ - somma il valore considerando le come numeri e restituendo un valore decimale
__multiply__ - moltiplica il valore considerando le come numeri e restituendo un valore decimale
__divide__ - divide il valore considerando le come numeri e restituendo un valore decimale
__subtract__ - sottrae il valore considerando le come numeri e restituendo un valore decimale
__format_as_money__ - formatta il dato numerico arrotondando al secondo decimale
__empty_cell__ - inserisce una cella vuota nel caso il risultato sia un valore nullo
__split__ - divide la stringa in due stringhe divise
__format_date__ - formatta la stringa in formato data
__is_date__ - verifica se la stringa è di tipo data
__chars__ - conta il numero di caratteri
__newline_to_br__ - nel caso di un campo testo con più righe, serve per mandare a capo come nella formattazione originale del testo
__capitalize_all__ - restituisce la stringa in maiuscolo
__format_as_percentage__ - restituisce la stringa formattata in percentuale
__format_discount_formula__ - formatta la formula di sconto nei preventivi
__format_time__ - formatta la stringa in formato ora
__format_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 predefinito
__discount__ - ritorna la formula di sconto dell'oggetto
__str_len__ - calcola la lunghezza della stringa
__now__ - Restituisce la data odierna