Auf dieser Seite finden Sie einsatzbereite Personalisierungsrezepte für Datumsangaben, Arrays, Zeichenfolgen, bedingte Logik und PQL-Edge-Fälle, die Sie direkt in Ihren Adobe Journey Optimizer-Inhalt kopieren können.
Auf dieser Seite finden Sie einsatzbereite Personalisierungsmuster für die häufigsten Anwendungsfälle in Adobe Journey Optimizer. Alle Beispiele verwenden die Syntax des Personalisierungseditors und können direkt in E-Mail-, SMS- oder Push-Inhalte kopiert werden.
Eine vollständige Übersicht der verfügbaren Funktionen finden Sie unter Hilfsfunktionen, Datums-/, Zeichenfolgenfunktionen und Array-Funktionen.
Rezepte für Datum und Uhrzeit date-time-recipes
Rezept 1 - Zeigt das aktuelle Datum in einem lesbaren Format an recipe-current-date
Verwenden Sie formatDate mit getCurrentZonedDateTime(), um das heutige Datum in einem beliebigen Format wiederzugeben:
{%= formatDate(getCurrentZonedDateTime(), "MMMM dd, yyyy") %}
Ausgabe (Beispiel): April 11, 2026
Allgemeine Formatmuster:
"dd/MM/yyyy"11/04/2026"MM/dd/yyyy"04/11/2026"EEEE, MMMM dd"Saturday, April 11"yyyy-MM-dd"2026-04-11y in Kleinbuchstaben (Kalenderjahr) anstelle von Y (wöchentliches Jahr), um unerwartete Ergebnisse an den Jahresgrenzen zu vermeiden. Siehe Musterzeichen für die vollständige Referenz.Rezept 2 — Countdown bis zu einem Ablauf- oder Ereignisdatum recipe-countdown
Verwenden Sie dateDiff, um die Anzahl der verbleibenden Tage bis zu einem Profildatumsattribut zu berechnen und es dann dynamisch zu rendern:
Ausgabe (Beispiel): Your reward points expire in 7 days. Use them before they're gone!
Rezept 3 - X Tage vor einem dynamischen Enddatum recipe-days-before
Um ein Datum zu berechnen, das X Tage vor einem Profilattribut liegt (z. B. um in Inhalt oder Betreffzeilen zu referenzieren), verwenden Sie addDays mit einem negativen Offset:
{%= formatDate(addDays(stringToDate(profile.subscription.endDate), -7), "MMMM dd, yyyy") %}
Ausgabe (Beispiel): April 04, 2026 (7 Tage vor dem 11. April)
Um auch eine feste Tageszeit festzulegen (z. B. 9 Uhr), kombinieren Sie mit setHours:
{%= formatDate(setHours(addDays(stringToDate(profile.subscription.endDate), -7), 9), "dd/MM/yyyy HH:mm") %}
Rezept 4 — Aktuelle Zeit nur als HH:MM anzeigen recipe-time-only
Verwenden Sie extractHours und extractMinutes, um nur den Zeitanteil anzuzeigen, mit einem Schutzmechanismus mit führender Null für Minuten:
Ausgabe (Beispiel): Your appointment is at 14:05.
Rezept 5 - Wochenende vs. Wochentag erkennen recipe-weekend
Verwenden Sie dayOfWeek , um Inhalte auf der Grundlage des Tages anzupassen. Die Funktion gibt 1 (Montag) bis 7 (Sonntag) zurück. Verwenden Sie den = Operator (PQL-Syntax, nicht ==):
dayOfWeek() dient der () je nach Tag. Wenn Sie Profile je nach Wochentag auf einer Journey unterschiedlich weiterleiten möchten, verwenden Sie die integrierte Option Zeitbedingung → Wochentag in der Aktivität Journey-Bedingung . Weitere InformationenArray- und Schleifenrezepte array-recipes
Rezept 6 - Listet alle Elemente aus einem Profil-Array auf recipe-list-items
Verwenden Sie {{#each}} , um über ein Profil-Array zu iterieren und jedes Element zu rendern. Dies ist nur im Personalisierungseditor (E-Mail, SMS, Push) verfügbar:
Ausgabe (Beispiel):
- Running shoes: 89€
- Water bottle: 15€
- Gym bag: 45€
{{#each}} wird in der Aktivität Journey-Bedingung nicht unterstützt. Verwenden Sie zum Filtern von Arrays in Bedingungen Sammlungs-Management-Funktionen.Rezept 7 - Zeigt die Top N Elemente aus einem Array nach Preis recipe-first-n
Verwenden Sie topN , um die Top-N-Elemente nach einem numerischen Feld zu sortieren und abzurufen. Da topN eine PQL-Funktion ist, weisen Sie sie zuerst mit {% let %} einer Variablen zu und dann mit {{#each}}:
topN(profile.orders, price, 3) sortiert Bestellungen nach price in absteigender Reihenfolge und gibt die drei wichtigsten zurück. Es werden nicht einfach die ersten drei Elemente in der ursprünglichen Array-Reihenfolge zurückgegeben.Oder verwenden Sie head, um nur das oberste Element abzurufen:
{%= head(profile.purchases.recentItems).name %}
Rezept 8 - Inhalt bedingt pro Array-Element rendern recipe-conditional-loop
Verwenden Sie {%#if%} in {{#each}}, um die Ausgabe nur für übereinstimmende Elemente zu rendern. Definieren Sie einen Schleifenalias mit as |order|, damit der PQL-Auswerter den Attributverweis in der Bedingung auflösen kann:
this.status funktioniert in Handlebars-Ausdrücken, wird aber vom PQL-Auswerter in {%#if%} nicht aufgelöst. Durch die Verwendung eines benannten Schleifenalias (z. B. order) wird das -Attribut sowohl für den Handlebars- als auch für den PQL-Kontext verfügbar.Zeichenfolgen- und Formatierungsrezepte string-recipes
Rezept 9 - Eine Zeichenfolge mit replaceAll reinigen und wiederverwenden recipe-replaceall-reuse
replaceAll gibt einen neuen Wert zurück - das Original wird nicht geändert. Verwenden Sie {% let %}, um das Ergebnis zu speichern und mehrmals darauf zu verweisen, ohne den Funktionsaufruf zu wiederholen:
Ausgabe (Beispiel):
Hi John,
Your exclusive code is: WELCOME-JOHN
Rezept 10 - Einen Wert in der JSON-Ausgabe doppelt angeben recipe-json-quotes
Um ein literales doppeltes Anführungszeichen in eine Zeichenfolge einzuschließen (z. B. um JSON für eine benutzerdefinierte Payload zu generieren), Escape-Zeichen mit einem umgekehrten Schrägstrich (\"):
Ausgabe: { "greeting": "Hello \"John\"" }
Rezept 11 - Formatieren einer Datumskomponente in Großbuchstaben recipe-uppercase-date
Kombinieren Sie formatDate mit upperCase, um Monats- oder Tagesnamen in Großbuchstaben zu ändern:
{%= upperCase(formatDate(getCurrentZonedDateTime(), "MMMM")) %}
Ausgabe (Beispiel): APRIL
Für eine vollständige Datumszeichenfolge in Großbuchstaben:
{%= upperCase(formatDate(profile.person.birthDateTime, "EEEE MMMM dd yyyy")) %}
Ausgabe (Beispiel): WEDNESDAY JANUARY 01 2020
Bedingte Logik - Rezepte conditional-recipes
Rezept 12 — IF/ELSEIF/ELSE in personalisierten Inhalten recipe-if-elseif
Verwenden Sie {%#if%}, {%else if%} und {%else%} für eine bedingte Logik mit mehreren Verzweigungen. Dieses Muster funktioniert in E-Mail-Inhalten und -Fragmenten:
Rezept 13 — Null-Safe-Attributanzeige recipe-null-safe
Verwenden Sie ein bedingtes Fallback, um zu vermeiden, dass leere Werte gerendert werden, wenn ein Profilattribut null sein kann oder fehlt:
Oder inline mit einem Muster im ternären Stil unter Verwendung von isEmpty:
PQL Edge Case-Rezepte pql-edge-cases
Rezept 14 - Referenzieren eines mit Bindestrichen versehenen Attributschlüssels recipe-hyphenated-key
Wenn der XDM-Schemafeldname Bindestriche enthält (z. B. order-total, event-type), schließen Sie ihn in einen PQL-Ausdruck mit Backticks ein, um zu verhindern, dass der Bindestrich als Subtraktionsoperator interpretiert wird:
{%= profile.events.`order-total` > 100 %}
{%= ... %}) unterstützt. Sie werden in der reinen Handlebars-Interpolation ({{...}}) nicht akzeptiert. Wenn Sie einen Feldwert mit Bindestrich direkt rendern müssen, werten Sie ihn über einen PQL-Ausdruck aus oder speichern Sie ihn zuerst mit {% let %} in einer Variablen.Rezept 15 - Referenzieren einer numerischen Ereignis-ID in einem Kontextattribut recipe-numeric-event-id
Wenn Sie ein Journey-Kontextereignis verwenden, dessen ID eine numerische Zeichenfolge ist (z. B. 1697323153), schließen Sie die ID in Backticks ein und verwenden Sie {% let %} mit toDateTime() und formatDate():
Ausgabe (Beispiel): Your appointment: 18/03/2026 14:30
Rezept 16 - Zwang eingeben: Zeichenfolgenfeld mit einer Zahl vergleichen recipe-type-coercion
PQL ist stark typisiert. Wenn ein Profilfeld als Zeichenfolge gespeichert wird, Sie es jedoch numerisch vergleichen müssen, konvertieren Sie es zuerst mit stringToNumber():
{%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}
Für boolesche Felder, die als Zeichenfolgen gespeichert werden:
{%= toBool(profile.consents.email.val) = true %}
Kurzübersicht quick-reference
Dieser Abschnitt enthält strukturiertes Wissen zur Unterstützung von Interpretation, Abrufen und Antworten auf Fragen zu diesem Thema.
Zum vollständigen Verständnis sollten diese Informationen mit der Dokumentation auf dieser Seite kombiniert werden. Keine der beiden Quellen ist für Einzelpersonen gedacht. Die Seite beschreibt die Funktion, während dieser Abschnitt zusätzlichen Kontext bietet, der dabei hilft, Begriffe, Absichten, Anwendbarkeit und Begrenzungen zu unterscheiden.
TL;DR
Auf dieser Seite finden Sie 16 einsatzbereite Personalisierungsrezepte zum Kopieren und Einfügen, die Datumsangaben, Arrays, Zeichenfolgen, bedingte Logik und PQL-Edge-Fälle zur Verwendung in E-Mail-, SMS- und Push-Inhalten von Journey Optimizer abdecken.
Intents
- Kopieren Sie gebrauchsfertige Datums-/Uhrzeitmuster (aktuelles Datum, Countdown, Offset-Daten, Zeitanzeige, Wochenenderkennung)
- Kopieren von Array- und Schleifenmustern (Listenelemente, Top-N-Elemente, bedingtes Rendering pro Element)
- Formatierungsmuster für Zeichenfolgen kopieren (Zeichenfolgen bereinigen und wiederverwenden, JSON-Anführungszeichen, Datumskomponenten in Großbuchstaben)
- Bedingte Logikmuster kopieren (mehrere Verzweigungen, wenn/Selbst/Sonst, null-sichere Attributanzeige)
- Behandlung von PQL-Randfällen (getrennte Schlüssel, numerische Ereignis-IDs, Typzwang)
- Personalization-Rezept: Ein einsatzbereites Muster zum Kopieren und Einfügen für einen gängigen Personalisierungs-Anwendungsfall unter Verwendung der Personalisierungseditor-Syntax. (produktspezifisch)
formatDate: Eine Funktion, die ein Datum mithilfe eines angegebenen Formatmusters (z. B."MMMM dd, yyyy") in eine Zeichenfolge konvertiert.dateDiff: Eine Funktion, die die numerische Differenz zwischen zwei Daten berechnet.getCurrentZonedDateTime(): Eine Funktion, die das aktuelle Datum und die aktuelle Uhrzeit in einem Zeitzonen-fähigen Format zurückgibt.topN: Eine PQL-Funktion, die ein Array nach einem angegebenen numerischen Feld in absteigender Reihenfolge sortiert und die Top-N-Elemente zurückgibt. Muss vor der Verwendung in einer Handlebars-Schleife über{% let %}zugewiesen werden.{% let %}: Handlebars-Variablenzuordnungssyntax für die Speicherung berechneter Werte; erforderlich, wenn ein PQL-Funktionsergebnis in einem nachfolgenden Handlebars-Kontext referenziert werden muss.replaceAll: Eine Zeichenfolgenfunktion, die alle Vorkommen eines Musters in einer Zeichenfolge ersetzt. Gibt eine neue Zeichenfolge zurück, ohne das Original zu ändern.
- Kanonischer Name: Personalisierungsrezept — Varianten: Muster, Vorlage, Beispiel, Kopieren-Einfügen-Muster
- Verwechseln Sie nicht:
{%= ... %}(PQL-Ausdruckssyntax - ausgewertet, gibt einen berechneten Wert zurück) ≠{{...}}(Handlebars-Interpolation - rendert eine Variable oder einen Vorlagenausdruck) - Verwechseln Sie nicht:
{%#if%}/{%/if%}(bedingte Journey Optimizer-Syntax, geschweifte Klammern in Prozent) ≠{{#if}}/{{/if}}(bedingte Handlebars-Standardsyntax) - Nicht verwechseln:
topN(array, field, n)(sortiert nach absteigendem Feld, gibt oben N zurück) ≠head(array)(gibt nur das erste Element aus dem Array zurück) - Verwechseln Sie nicht:
dayOfWeek()(wird im Nachrichteninhalt verwendet, um die Anzeige basierend auf dem Tag anzupassen) ≠ die Journey-Zeitbedingung „Wochentag“ (wird in der Aktivität "Journey-Bedingung“ verwendet, um Profile anders zu leiten) - Nicht verwechseln: Datumsformatmuster
y(Kalenderjahr — korrekt) ≠Y(wöchentliches Jahr — kann zu unerwarteten Ergebnissen bei Jahresgrenzen führen)
{{#each}}wird in der Aktivität "Journey-Bedingung“ nicht unterstützt. Verwenden Sie die Sammlungsverwaltungsfunktionen zum Filtern von Arrays in Journey-Bedingungen.- Backtick-Escaping für getrennte Attributschlüssel wird nur innerhalb von PQL-Ausdrücken (
{%= ... %}) unterstützt. Backticks werden in der einfachen Handlebars-Interpolation ({{...}}) nicht akzeptiert. topNist eine PQL-Funktion und muss einer{% let %}-Variablen zugewiesen werden, bevor sie als{{#each}}-Schleifenziel verwendet wird.- Deklarieren Sie bei Verwendung einer Schleifenvariablen innerhalb eines
{%#if%}-Blocks einen benannten Schleifenalias (z. B.as |order|).this.statuswird vom PQL-Auswerter in{%#if%}nicht aufgelöst. - Verwenden Sie
yinformatDatefür das Kalenderjahr.Y(wöchentliches Jahr) kann zu unerwarteten Werten am Jahresende führen.
F: Was ist der Unterschied zwischen {%= ... %} und {{...}} bei der Personalisierung?
{%= ... %} ist die PQL-Ausdruckssyntax, die ausgewertet wird und einen berechneten Wert zurückgibt (Zahl, Zeichenfolge, Boolesch). {{...}} Handlebars-Interpolation wird eine Variable oder ein Vorlagenausdruck gerendert. Beide werden im Personalisierungsinhalt angezeigt, haben jedoch unterschiedliche Zwecke.
F: Wie verwende ich ein PQL-Funktionsergebnis in einer Handlebars-{{#each}}?
Weisen Sie das PQL-Funktionsergebnis mithilfe von {% let variableName = pqlFunction(...) %} einer Variablen zu und verwenden Sie dann {{#each variableName}}, um darüber zu iterieren.
F: Kann {{#each}} in einer Journey-Bedingungsaktivität verwendet werden?
Nein. {{#each}} ist nur im Inhalt der Nachrichtenpersonalisierung (E-Mail, SMS, Push) verfügbar. Verwenden Sie für die Array-Filterung unter Journey-Bedingungen die Funktionen zur Sammlungsverwaltung.
F: Wie verweise ich auf ein Feld, dessen Name einen Bindestrich enthält?
Schließen Sie den mit Bindestrich versehenen Schlüssel in Backticks in einem PQL-Ausdruck ein: {%= profile.events.`order-total` > 100 %}. Backticks werden in der reinen Handlebars-Interpolation nicht unterstützt. Verwenden Sie bei Bedarf eine {% let %} Variable als Zwischenschritt.
F: Warum braucht topN {% let %} vor einer {{#each}} Schleife?
topN ist eine PQL-Funktion, die eine PQL-Liste zurückgibt. Wenn Sie das Ergebnis einer {% let %}-Variablen zuweisen, steht es im Handlebars-Kontext zur Verfügung, sodass es mit {{#each}} iteriert werden kann.