HTL Tutorial #2: Espressioni e Tipi di Dato
HTL Tutorial #2: Espressioni e Tipi di Dato
Sintassi delle Espressioni
Le espressioni HTL sono racchiuse tra ${ e } e possono contenere:
- Identificatori (variabili)
- Letterali (valori fissi)
- Operatori
- Accesso a proprietà
${variabile}
${'stringa letterale'}
${numero}
${oggetto.proprieta}Identificatori
Gli identificatori sono nomi di variabili che referenziano dati:
<!-- Proprietà del componente -->
${properties.title}
<!-- Proprietà della pagina corrente -->
${currentPage.title}
<!-- Variabili definite -->
${myVariable}Oggetti Globali Disponibili
HTL mette a disposizione diversi oggetti globali:
| Oggetto | Descrizione |
|---|---|
properties |
Proprietà del componente corrente |
currentPage |
Pagina corrente |
pageProperties |
Proprietà della pagina corrente |
inheritedPageProperties |
Proprietà ereditate dalla gerarchia |
component |
Metadati del componente |
resource |
Risorsa Sling corrente |
request |
HTTP request |
wcmmode |
Modalità WCM (edit, preview, disabled) |
Esempio pratico:
<article>
<h1>${currentPage.title}</h1>
<p class="subtitle">${pageProperties.subtitle}</p>
<time>${properties.publishDate}</time>
</article>Tipi di Dato Letterali
1. Stringhe
Stringhe racchiuse tra apici singoli o doppi:
<!-- Apici singoli -->
${'Benvenuto'}
<!-- Apici doppi -->
${"Ciao Mondo"}
<!-- Con escape -->
${'It\'s a beautiful day'}
${"Disse: \"Ciao\""}Sequenze di escape supportate:
\b → backspace
\t → tab
\n → newline
\f → form feed
\r → carriage return
\" → doppio apice
\' → apice singolo
\\ → backslash
\uXXXX → carattere Unicode2. Numeri
Interi e decimali:
<!-- Interi -->
${42}
${-10}
<!-- Decimali -->
${3.14}
${-0.5}
<!-- Notazione scientifica -->
${1.5e10}
${2E-3}Esempio pratico:
<div class="price">
<!-- Prezzo originale -->
<span class="original">${99.99}</span>
<!-- Sconto percentuale -->
<span class="discount">${20}% OFF</span>
<!-- Prezzo finale -->
<span class="final">${79.99}</span>
</div>3. Booleani
Valori true e false:
${true}
${false}4. Array
Liste di valori tra parentesi quadre:
${['primo', 'secondo', 'terzo']}
${[1, 2, 3, 4, 5]}
${[true, false, true]}Accesso agli elementi:
<!-- Primo elemento (indice 0) -->
${myArray[0]}
<!-- Secondo elemento -->
${myArray[1]}
<!-- Con variabile come indice -->
${myArray[index]}Accesso a Proprietà
Dot Notation (notazione punto)
<!-- Accesso proprietà -->
${properties.title}
<!-- Accesso annidato -->
${currentPage.properties.jcr:title}
<!-- Attenzione: NO spazi! -->
${object.property} ✓ Corretto
${object . property} ✗ ErroreBracket Notation (notazione parentesi)
Utile per:
- Proprietà con caratteri speciali
- Proprietà con spazi
- Accesso dinamico
<!-- Proprietà con due punti -->
${properties['jcr:title']}
<!-- Proprietà con spazi (permessi qui!) -->
${object['my property']}
<!-- Accesso dinamico -->
${object[variableName]}Esempio pratico:
<div data-sly-use.model="com.example.ProductModel">
<!-- Notazione punto -->
<h2>${model.productName}</h2>
<!-- Notazione parentesi con variabile -->
<p>${model[fieldName]}</p>
<!-- Proprietà JCR -->
<time>${properties['jcr:created']}</time>
</div>Casting Automatico
HTL converte automaticamente i valori:
A Stringa
<!-- Numero → Stringa -->
${'Hai ' + 5 + ' messaggi'}
<!-- Output: "Hai 5 messaggi" -->
<!-- Boolean → Stringa -->
${'Attivo: ' + true}
<!-- Output: "Attivo: true" -->A Booleano
Valori falsy (considerati false):
false0o0.0- Stringa vuota
"" - Array vuoto
[]
Tutti gli altri valori sono truthy (considerati true).
<!-- Solo se title non è vuoto -->
<h1 data-sly-test="${properties.title}">
${properties.title}
</h1>
<!-- Solo se count è > 0 -->
<div data-sly-test="${properties.count}">
${properties.count} elementi
</div>Espressioni Vuote
Un'espressione vuota è valida e non produce output:
${}
<!-- Output: nulla -->Esempio Completo: Card Prodotto
<div class="product-card" data-sly-use.product="com.example.ProductModel">
<!-- Titolo -->
<h3>${product.name}</h3>
<!-- Descrizione (proprietà con spazi) -->
<p>${product['long description']}</p>
<!-- Prezzo -->
<div class="price">
<span class="currency">${'€'}</span>
<span class="amount">${product.price}</span>
</div>
<!-- Disponibilità -->
<p class="stock">
${'In magazzino: ' + product.stockCount}
</p>
<!-- Rating (array) -->
<div class="rating">
${product.ratings[0]} stelle
</div>
<!-- Proprietà JCR -->
<time datetime="${properties['jcr:created']}">
Creato: ${properties['jcr:created']}
</time>
</div>Escape dell'Espressione
Per mostrare letteralmente ${ senza valutarlo:
\${questa.non.viene.valutata}
<!-- Output: ${questa.non.viene.valutata} -->Best Practice
- Usa dot notation quando possibile: più leggibile
- Bracket notation per proprietà JCR:
${properties['jcr:title']} - Non fare operazioni complesse nelle espressioni: spostale in Sling Model
- Sfrutta il casting automatico:
data-sly-test="${variable}"è sufficiente
Esercizi Pratici
Prova a creare questi componenti:
- User Profile: Mostra nome, email e avatar da
properties - Counter: Mostra un numero e il suo quadrato
- List Preview: Mostra i primi 3 elementi di un array
Prossima Lezione
Nella prossima lezione impareremo gli operatori logici, di confronto e relazionali per creare espressioni più complesse.
Lezione #2 della serie HTL Tutorial. ← Lezione precedente | Lezione successiva →