In questa pagina: Trova ricette di personalizzazione pronte all’uso per date, array, stringhe, logica condizionale e casi edge di PQL che puoi copiare direttamente nel contenuto di Adobe Journey Optimizer.
Questa pagina fornisce modelli di personalizzazione pronti all’uso per i casi d’uso più comuni in Adobe Journey Optimizer. Tutti gli esempi utilizzano la sintassi dell’editor di personalizzazione e possono essere copiati direttamente nei contenuti e-mail, SMS o push.
Per un riferimento completo delle funzioni disponibili, vedere Funzioni helper, Funzioni data/ora, Funzioni stringa e Funzioni array.
Ricette data e ora date-time-recipes
Ricetta 1 - Visualizza la data corrente in un formato leggibile recipe-current-date
Utilizza formatDate con getCurrentZonedDateTime() per eseguire il rendering della data odierna in qualsiasi formato:
{%= formatDate(getCurrentZonedDateTime(), "MMMM dd, yyyy") %}
Output (esempio): April 11, 2026
Modelli di formato comuni:
"dd/MM/yyyy"11/04/2026"MM/dd/yyyy"04/11/2026"EEEE, MMMM dd"Saturday, April 11"yyyy-MM-dd"2026-04-11y minuscolo (anno di calendario) anziché Y (anno basato su settimane) per evitare risultati imprevisti ai limiti dell'anno. Vedi caratteri pattern per il riferimento completo.Ricetta 2: conto alla rovescia per una data di scadenza o evento recipe-countdown
Utilizzare dateDiff per calcolare il numero di giorni rimanenti fino a un attributo di data profilo, quindi eseguirne il rendering in modo dinamico:
Output (esempio): Your reward points expire in 7 days. Use them before they're gone!
Ricetta 3: X giorni prima di una data di fine dinamica recipe-days-before
Per calcolare una data che è X giorni prima di un attributo di profilo (ad esempio per fare riferimento nel contenuto o nelle righe dell’oggetto), utilizzare addDays con un offset negativo:
{%= formatDate(addDays(stringToDate(profile.subscription.endDate), -7), "MMMM dd, yyyy") %}
Output (esempio): April 04, 2026 (7 giorni prima dell’11 aprile)
Per impostare anche un’ora fissa del giorno (ad esempio le 9), combinare con setHours:
{%= formatDate(setHours(addDays(stringToDate(profile.subscription.endDate), -7), 9), "dd/MM/yyyy HH:mm") %}
Ricetta 4 - Visualizza solo ora corrente come HH:MM recipe-time-only
Utilizzare extractHours e extractMinutes per visualizzare solo la parte relativa al tempo, con una protezione iniziale dello zero per i minuti:
Output (esempio): Your appointment is at 14:05.
Ricetta 5 — Rilevare fine settimana e giorno feriale recipe-weekend
Utilizza dayOfWeek per adattare il contenuto in base al giorno. La funzione restituisce da 1 (lunedì) a 7 (domenica). Utilizza il singolo operatore = (sintassi PQL, non ==):
dayOfWeek() è per adattare contenuto in base al giorno. Per instradare i profili in modo diverso in un percorso in base al giorno della settimana, utilizzare l'opzione predefinita Condizione temporale → Giorno della settimana nell'attività Condizione percorso. Ulteriori informazioniArray e cicli predefiniti array-recipes
Ricetta 6 — Elenca tutti gli elementi da un array di profili recipe-list-items
Utilizza {{#each}} per eseguire l’iterazione su un array di profili ed eseguire il rendering di ogni elemento. È disponibile solo nell’editor di personalizzazione (e-mail, SMS, push):
Output (esempio):
- Running shoes: 89€
- Water bottle: 15€
- Gym bag: 45€
{{#each}} non è supportato nell'attività condizione percorso. Per filtrare gli array nelle condizioni, utilizzare funzioni di gestione della raccolta.Ricetta 7: mostra i primi N articoli da un array in base al prezzo recipe-first-n
Utilizzare topN per ordinare e recuperare i primi N elementi in base a un campo numerico. Poiché topN è una funzione di PQL, assegnarla prima a una variabile con {% let %}, quindi eseguire il ciclo con {{#each}}:
topN(profile.orders, price, 3) ordina gli ordini per price in ordine decrescente e restituisce i primi 3, non semplicemente restituisce i primi 3 elementi nell'ordine di matrice originale.In alternativa, utilizzare head per ottenere solo il singolo elemento principale:
{%= head(profile.purchases.recentItems).name %}
Ricetta 8 — Eseguire il rendering del contenuto in modo condizionale per elemento array recipe-conditional-loop
Utilizza {%#if%} in {{#each}} per eseguire il rendering dell’output solo per gli elementi corrispondenti. Definisci un alias di loop con as |order| in modo che l’esaminatore PQL possa risolvere il riferimento all’attributo nella condizione:
this.status funziona nelle espressioni Handlebars ma non è risolto dal valutatore PQL all'interno di {%#if%}. L'utilizzo di un alias di loop denominato, ad esempio order, rende l'attributo disponibile sia per gli Handlebars che per i contesti di PQL.Stringhe e formule di formattazione string-recipes
Ricetta 9 — Pulire una stringa con replaceAll e riutilizzarla recipe-replaceall-reuse
replaceAll restituisce un nuovo valore, non modifica l’originale. Utilizzare {% let %} per memorizzare il risultato e fare riferimento a esso più volte senza ripetere la chiamata alla funzione:
Output (esempio):
Hi John,
Your exclusive code is: WELCOME-JOHN
Ricetta 10: virgolette doppie per un valore nell’output JSON recipe-json-quotes
Per includere una virgoletta doppia letterale all’interno di una stringa (ad esempio, generando JSON per un payload personalizzato), esegui l’escape con una barra rovesciata (\"):
Output: { "greeting": "Hello \"John\"" }
Ricetta 11 — Formattare un componente data in maiuscolo recipe-uppercase-date
Combina formatDate con upperCase per riprodurre i nomi dei mesi o dei giorni in lettere maiuscole:
{%= upperCase(formatDate(getCurrentZonedDateTime(), "MMMM")) %}
Output (esempio): APRIL
Per una stringa di data completa in maiuscolo:
{%= upperCase(formatDate(profile.person.birthDateTime, "EEEE MMMM dd yyyy")) %}
Output (esempio): WEDNESDAY JANUARY 01 2020
Ricette logiche condizionali conditional-recipes
Ricetta 12 — IF/ELSEIF/ELSE nel contenuto personalizzato recipe-if-elseif
Utilizzare {%#if%}, {%else if%} e {%else%} per la logica condizionale multi-branch. Questo modello funziona nei contenuti e nei frammenti dell’e-mail:
Ricetta 13: visualizzazione degli attributi Null-safe recipe-null-safe
Utilizza un fallback condizionale per evitare di eseguire il rendering di valori vuoti quando un attributo di profilo può essere nullo o mancante:
Oppure in linea con uno schema di tipo ternario utilizzando isEmpty:
ricette per casi edge di PQL pql-edge-cases
Ricetta 14 - Riferimento a una chiave attributo sillabata recipe-hyphenated-key
Se il nome del campo dello schema XDM contiene trattini (ad esempio order-total, event-type), inseriscilo in apici all’interno di un’espressione PQL per impedire che il trattino venga interpretato come un operatore di sottrazione:
{%= profile.events.`order-total` > 100 %}
{%= ... %}). Non sono accettati nell'interpolazione Handlebars normale ({{...}}). Se devi eseguire direttamente il rendering di un valore di campo sillabato, valutalo tramite un'espressione PQL o memorizzalo in una variabile utilizzando prima {% let %}.Ricetta 15: fare riferimento a un ID evento numerico in un attributo di contesto recipe-numeric-event-id
Quando si utilizza un evento di contesto di percorso il cui ID è una stringa numerica (ad esempio 1697323153), racchiudere l’ID in apici e utilizzare {% let %} con toDateTime() e formatDate():
Output (esempio): Your appointment: 18/03/2026 14:30
Ricetta 16 — Tipo coercizione: confrontare un campo stringa con un numero recipe-type-coercion
PQL è fortemente tipizzato. Quando un campo del profilo è memorizzato come stringa ma è necessario confrontarlo numericamente, convertire prima il campo con stringToNumber():
{%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}
Per i campi booleani memorizzati come stringhe:
{%= toBool(profile.consents.email.val) = true %}