Personalization-recepten personalization-recipes

op deze pagina: vind gebruiksklare verpersoonlijkingsrecepten voor data, series, koorden, voorwaardelijke logica, en de randgevallen van PQL die u direct in uw inhoud van Adobe Journey Optimizer kunt kopiëren.

Deze pagina biedt gebruiksklare personalisatiepatronen voor de meest gebruikte gevallen in Adobe Journey Optimizer. Alle voorbeelden gebruiken de syntaxis van de verpersoonlijkingsredacteur en kunnen direct in e-mail, SMS, of drukinhoud worden gekopieerd.

Voor een volledige verwijzing van beschikbare functies, zie ​ de functies van de Helper ​, ​ functies van de Datum/tijd ​, ​ functies van het Koord ​, en ​ functies van de Serie ​.

TIP
Alvorens voorbeelden te kopiëren, herzie de ​ beste praktijken van Personalization ​ om de gemeenschappelijkste syntaxisfouten te vermijden.

Datum- en tijdrecepten date-time-recipes

Recipe 1 — De huidige datum weergeven in een leesbare indeling recipe-current-date

Gebruik formatDate met getCurrentZonedDateTime() om de datum van vandaag in om het even welke formaat terug te geven:

{%= formatDate(getCurrentZonedDateTime(), "MMMM dd, yyyy") %}

Uitvoer (voorbeeld): April 11, 2026

Gemeenschappelijke formaatpatronen:

Patroon
Uitvoervoorbeeld
"dd/MM/yyyy"
11/04/2026
"MM/dd/yyyy"
04/11/2026
"EEEE, MMMM dd"
Saturday, April 11
"yyyy-MM-dd"
2026-04-11
NOTE
Gebruik kleine letters y (kalenderjaar) in plaats van Y (week gebaseerd jaar) om onverwachte resultaten te voorkomen bij de grenzen van het jaar. Zie ​ patroonkarakters ​ voor de volledige verwijzing.

Recipe 2 — Aftellen tot een vervaldatum of gebeurtenisdatum recipe-countdown

Gebruik dateDiff om het aantal dagen te berekenen dat resteert tot een kenmerk voor een profieldatum en het vervolgens dynamisch weer te geven:

{% let daysLeft = dateDiff(getCurrentZonedDateTime(), stringToDate(profile.loyalty.expiryDate)) %}
{%#if daysLeft > 0%}
Your reward points expire in {{daysLeft}} day{%#if daysLeft > 1%}s{%/if%}. Use them before they're gone!
{%else%}
Your reward points have expired.
{%/if%}

Uitvoer (voorbeeld): Your reward points expire in 7 days. Use them before they're gone!

Recipe 3 — X dagen vóór een dynamische einddatum recipe-days-before

Als u een datum wilt berekenen die X dagen vóór een profielkenmerk ligt (bijvoorbeeld om te verwijzen in inhoud of onderwerpregel), gebruikt u addDays met een negatieve verschuiving:

{%= formatDate(addDays(stringToDate(profile.subscription.endDate), -7), "MMMM dd, yyyy") %}

Uitvoer (voorbeeld): April 04, 2026 (7 dagen vóór 11 april)

Als u ook een vaste tijd van de dag wilt instellen (bijvoorbeeld 9.00 uur), combineert u met setHours :

{%= formatDate(setHours(addDays(stringToDate(profile.subscription.endDate), -7), 9), "dd/MM/yyyy HH:mm") %}

Recipe 4 — Toon huidige tijd als HH :MM slechts recipe-time-only

Gebruik extractHours en extractMinutes om alleen het tijdgedeelte weer te geven, met een voorloopnul voor minuten:

{% let h = extractHours(getCurrentZonedDateTime()) %}
{% let m = extractMinutes(getCurrentZonedDateTime()) %}
Your appointment is at {{h}}:{%#if m < 10%}0{%/if%}{{m}}.

Uitvoer (voorbeeld): Your appointment is at 14:05.

Recipe 5 — Detect weekend vs. weekdag recipe-weekend

Gebruik dayOfWeek om de inhoud aan te passen op basis van de dag. De functie retourneert 1 (maandag) tot en met 7 (zondag). Gebruik de enkele operator = (syntaxis van PQL, niet == ):

{%#if dayOfWeek(getCurrentZonedDateTime()) = 6 or dayOfWeek(getCurrentZonedDateTime()) = 7%}
We're closed on weekends — our team will follow up on the next business day.
{%else%}
Our team will get back to you within 24 hours.
{%/if%}
NOTE
dayOfWeek() is voor het aanpassen van inhoud die op de dag wordt gebaseerd. Voor het verpletteren van profielen verschillend in een reis die op de dag van de week wordt gebaseerd, gebruik de ingebouwde voorwaarde van de Tijd → Dag van de week optie in de activiteit van de reisvoorwaarde. ​ Leer meer ​

Array- en lusrecepten array-recipes

Recipe 6 — Alle items van een profielarray weergeven recipe-list-items

Gebruik {{#each}} om een profielarray te doorlopen en elk item te renderen. Deze optie is alleen beschikbaar in de verpersoonlijkingseditor (e-mail, SMS, push):

{{#each profile.purchases.recentItems}}
  - {{this.name}}: {{this.price}}&euro;
{{/each}}

Uitvoer (voorbeeld):

- Running shoes: 89&euro;
- Water bottle: 15&euro;
- Gym bag: 45&euro;
NOTE
{{#each}} wordt niet ondersteund in de activiteit van de reisvoorwaarde. Voor serie het filtreren in voorwaarden, gebruik ​ functies van het inzamelingsbeheer ​.

Recipe 7 — Toon de bovenste N-items van een array op prijs recipe-first-n

Gebruik topN om de bovenste N-items op een numeriek veld te sorteren en op te halen. Aangezien topN een PQL-functie is, moet u de functie eerst met {% let %} aan een variabele toewijzen en daarna met {{#each}} herhalen:

{% let topOrders = topN(profile.orders, price, 3) %}
{{#each topOrders}}
  {{this.name}} — {{this.price}}&euro;
{{/each}}
NOTE
topN(profile.orders, price, 3) sorteert orders op price in aflopende volgorde en retourneert de bovenste 3. De eerste 3 items worden niet gewoon in de oorspronkelijke arrayvolgorde geretourneerd.

Of gebruik head om alleen het ene bovenste item op te halen:

{%= head(profile.purchases.recentItems).name %}

Recipe 8 — Inhoud voorwaardelijk renderen per arrayitem recipe-conditional-loop

Gebruik {%#if%} inside {{#each}} om alleen uitvoer te renderen voor overeenkomende items. Definieer een lusalias met as |order| zodat de beoordelaar van PQL de kenmerkverwijzing in de voorwaarde kan oplossen:

{{#each profile.orders as |order|}}
  {%#if order.status = "pending"%}
  Order {{order.id}} is pending — we'll notify you when it ships.
  {%/if%}
{{/each}}
NOTE
this.status werkt in Handlebars-expressies, maar wordt niet opgelost door de PQL-beoordelaar in {%#if%} . Een benoemde lusalias gebruiken (bijvoorbeeld order ) maakt het kenmerk beschikbaar voor zowel de context Handlebars als PQL.

Reacties voor tekenreeks en opmaak string-recipes

Recipe 9 — Clean a string with replaceAll and reuse it recipe-replaceall-reuse

replaceAll retourneert een nieuwe waarde. De oorspronkelijke waarde wordt hierdoor niet gewijzigd. Gebruik {% let %} om het resultaat op te slaan en er meerdere keren naar te verwijzen zonder de functieaanroep te herhalen:

{% let cleanName = replaceAll(profile.person.name.firstName, "[^a-zA-Z]", "") %}
Hi {{cleanName}},
Your exclusive code is: WELCOME-{%= upperCase(cleanName) %}

Uitvoer (voorbeeld):

Hi John,
Your exclusive code is: WELCOME-JOHN

Recipe 10 — Dubbelciteer een waarde in JSON-uitvoer recipe-json-quotes

Als u een letterlijk dubbel aanhalingsteken in een tekenreeks wilt opnemen (bijvoorbeeld het genereren van JSON voor een aangepaste lading), laat u dit item ontsnappen met een backslash (\"):

{ "greeting": "Hello \"{{profile.person.name.firstName}}\"" }

Uitvoer: { "greeting": "Hello \"John\"" }

Recipe 11 — Een datumcomponent opmaken in hoofdletters recipe-uppercase-date

Combineer formatDate met upperCase om maand- of dagnamen in hoofdletters weer te geven:

{%= upperCase(formatDate(getCurrentZonedDateTime(), "MMMM")) %}

Uitvoer (voorbeeld): APRIL

Voor een datumtekenreeks in hoofdletters:

{%= upperCase(formatDate(profile.person.birthDateTime, "EEEE MMMM dd yyyy")) %}

Uitvoer (voorbeeld): WEDNESDAY JANUARY 01 2020

Voorwaardelijke logische recepten conditional-recipes

Recipe 12 — IF/ELSEIF/ELSE in gepersonaliseerde inhoud recipe-if-elseif

Gebruik {%#if%} , {%else if%} en {%else%} voor voorwaardelijke logica met meerdere vertakkingen. Dit patroon werkt in e-mailinhoud en fragmenten:

{%#if profile.loyalty.tier = "gold"%}
As a Gold member, enjoy free shipping on all orders.
{%else if profile.loyalty.tier = "silver"%}
As a Silver member, enjoy free shipping on orders over &euro;50.
{%else%}
Join our loyalty program to unlock exclusive benefits.
{%/if%}

Recipe 13 — Null-safe kenmerkweergave recipe-null-safe

Gebruik een voorwaardelijke fallback om te voorkomen dat lege waarden worden weergegeven wanneer een profielkenmerk null is of ontbreekt:

{%#if profile.person.name.firstName%}
Hi {{profile.person.name.firstName}},
{%else%}
Hi there,
{%/if%}

Of inline met een ternair patroon met isEmpty :

Hi {%#if isEmpty(profile.person.name.firstName)%}valued customer{%else%}{{profile.person.name.firstName}}{%/if%},

PQL-recepten voor kleine letters pql-edge-cases

Recipe 14 — Reference a hyphenated attribute key recipe-hyphenated-key

Als de veldnaam van het XDM-schema afbreekstreepjes bevat (bijvoorbeeld order-total , event-type ), plaatst u het afbreekstreepje op de achtergrond in een PQL-expressie om te voorkomen dat het afbreekstreepje wordt geïnterpreteerd als een aftrekoperator:

{%= profile.events.`order-total` > 100 %}
NOTE
Achtergronden worden alleen ondersteund binnen PQL-expressies ({%= ... %}). Zij worden niet toegelaten in gewone Handlebars interpolatie ({{...}}). Als u een afgebroken veldwaarde rechtstreeks wilt renderen, evalueert u deze via een PQL-expressie of slaat u deze waarde eerst met {% let %} op in een variabele.

Recipe 15 — Reference a numeric event ID in a context attribute recipe-numeric-event-id

Bij gebruik van een gebeurtenis van de reiscontext waarvan de id een numerieke tekenreeks is (bijvoorbeeld 1697323153), plaatst u de id op de achtergrond en gebruikt u {% let %} met toDateTime() en formatDate() :

{% let appointmentDate = formatDate(toDateTime(context.journey.events.`1697323153`.timestamp), "dd/MM/yyyy HH:mm") %}
Your appointment: {{appointmentDate}}

Uitvoer (voorbeeld): Your appointment: 18/03/2026 14:30

Recipe 16 — Type dwang: een tekenreeksveld vergelijken met een getal recipe-type-coercion

PQL wordt sterk getypeerd. Wanneer een profielveld wordt opgeslagen als een tekenreeks, maar u moet het numeriek vergelijken, moet u het eerst omzetten met stringToNumber() :

{%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}

Voor Booleaanse velden die zijn opgeslagen als tekenreeksen:

{%= toBool(profile.consents.email.val) = true %}
recommendation-more-help
journey-optimizer-help