在此頁面上:尋找可直接複製到Adobe Journey Optimizer內容中的現成個人化配方,適用於日期、陣列、字串、條件邏輯和PQL邊緣案例。
本頁針對Adobe Journey Optimizer中最常見的使用案例提供現成的個人化模式。 所有範例都使用個人化編輯器語法,並可直接複製到電子郵件、簡訊或推播內容中。
如需可用函式的完整參考,請參閱協助程式函式、日期/時間函式、字串函式和陣列函式。
日期與時間配方 date-time-recipes
方式1 — 以可讀格式顯示目前日期 recipe-current-date
使用formatDate搭配getCurrentZonedDateTime()以任何格式呈現今天的日期:
{%= formatDate(getCurrentZonedDateTime(), "MMMM dd, yyyy") %}
輸出(範例): April 11, 2026
通用格式模式:
"dd/MM/yyyy"11/04/2026"MM/dd/yyyy"04/11/2026"EEEE, MMMM dd"Saturday, April 11"yyyy-MM-dd"2026-04-11方式2 — 到期或事件日期的倒數 recipe-countdown
使用dateDiff計算設定檔日期屬性之前的剩餘天數,然後以動態方式呈現:
輸出(範例): Your reward points expire in 7 days. Use them before they're gone!
配方3 — 動態結束日期前的X天 recipe-days-before
若要計算設定檔屬性之前X天的日期(例如在內容或主旨行中參照),請使用負位移的addDays:
{%= formatDate(addDays(stringToDate(profile.subscription.endDate), -7), "MMMM dd, yyyy") %}
輸出(範例): April 04, 2026 (4月11日前7天)
若要同時設定一天中的固定時間(例如,上午9點),請結合setHours:
{%= formatDate(setHours(addDays(stringToDate(profile.subscription.endDate), -7), 9), "dd/MM/yyyy HH:mm") %}
配方4 — 將目前時間顯示為HH:MM recipe-time-only
使用extractHours和extractMinutes只顯示時間部分,並在前導為零時保留分鐘:
輸出(範例): Your appointment is at 14:05.
食譜5 — 偵測週末與平日 recipe-weekend
使用dayOfWeek根據日期調整內容。 此函式傳回1 (星期一)到7 (星期日)。 使用單一=運運算元(PQL語法,而非==):
dayOfWeek()是根據日期調整內容。 若要根據一週中的某天在歷程中以不同方式路由設定檔,請在歷程條件活動中使用內建的 時間條件→一週中的某天 選項。 了解更多陣列與回圈配方 array-recipes
指導方針6 — 列出設定檔陣列中的所有專案 recipe-list-items
使用{{#each}}來反複處理設定檔陣列並演算每個專案。 這僅在個人化編輯器(電子郵件、簡訊、推播)中可用:
輸出(範例):
- Running shoes: 89€
- Water bottle: 15€
- Gym bag: 45€
{{#each}}。 若要在條件中篩選陣列,請使用集合管理函式。配方7 — 依價格顯示陣列中的前N個專案 recipe-first-n
使用topN依數值欄位排序及擷取前N個專案。 由於topN是PQL函式,請先將其指派給具有{% let %}的變數,然後以{{#each}}進行回圈:
topN(profile.orders, price, 3)會依遞減順序排序price並傳回前3個專案 — 它不會簡單地傳回原始陣列順序中的前3個專案。或使用head只取得單一最上層專案:
{%= head(profile.purchases.recentItems).name %}
方式8 — 根據陣列專案有條件地呈現內容 recipe-conditional-loop
在{{#each}}內使用{%#if%}僅針對相符的專案轉譯輸出。 定義具有as |order|的回圈別名,讓PQL評估器能夠解析條件中的屬性參考:
this.status在Handlebars運算式中運作,但未由{%#if%}內的PQL評估程式解析。 使用具名回圈別名(例如order)可讓屬性同時用於Handlebars和PQL內容。字串與格式設定配方 string-recipes
方式9 — 使用replaceAll清除字串並重複使用 recipe-replaceall-reuse
replaceAll傳回新值 — 它不會修改原始值。 使用{% let %}儲存結果並多次參考它,而不重複函式呼叫:
輸出(範例):
Hi John,
Your exclusive code is: WELCOME-JOHN
指導方針10 — JSON輸出中的雙引號值 recipe-json-quotes
若要在字串中包含常值雙引號(例如為自訂裝載產生JSON),請使用反斜線(\")將其逸出:
輸出: { "greeting": "Hello \"John\"" }
方式11 — 將日期元件格式化為大寫 recipe-uppercase-date
將formatDate與upperCase結合,以大寫方式呈現月份或日期名稱:
{%= upperCase(formatDate(getCurrentZonedDateTime(), "MMMM")) %}
輸出(範例): APRIL
若為完整的大寫日期字串:
{%= upperCase(formatDate(profile.person.birthDateTime, "EEEE MMMM dd yyyy")) %}
輸出(範例): WEDNESDAY JANUARY 01 2020
條件邏輯配方 conditional-recipes
指導方針12 — 個人化內容中的IF/ELSEIF/ELSE recipe-if-elseif
針對多分支條件式邏輯使用{%#if%}、{%else if%}和{%else%}。 此模式適用於電子郵件內容和片段:
配方13 — 空值安全屬性顯示 recipe-null-safe
使用條件式遞補,以避免在設定檔屬性可能為Null或遺失時呈現空白值:
或使用isEmpty以三元樣式模式內嵌:
PQL邊緣案例訣竅 pql-edge-cases
指導方針14 — 參照連字屬性索引鍵 recipe-hyphenated-key
如果您的XDM結構描述欄位名稱包含連字型大小(例如order-total、event-type),請在PQL運算式中以反引號將其包裝,以防止將連字型大小解譯為減法運運算元:
{%= profile.events.`order-total` > 100 %}
{%= ... %})內支援反引號。 在純的Handlebars內插({{...}})中不接受它們。 如果您需要直接轉譯斷字欄位值,請先透過PQL運算式評估該值,或使用{% let %}將其儲存在變數中。方式15 — 參考內容屬性中的數值事件ID recipe-numeric-event-id
使用歷程內容事件時,若其ID為數值字串(例如1697323153),請以反引號括住該ID,並使用{% let %}搭配toDateTime()和formatDate():
輸出(範例): Your appointment: 18/03/2026 14:30
方式16 — 輸入強制:比較字串欄位與數字 recipe-type-coercion
PQL是強型別。 當設定檔欄位儲存為字串,但您需要以數值加以比較時,請先將其轉換為stringToNumber():
{%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}
對於儲存為字串的布林值欄位:
{%= toBool(profile.consents.email.val) = true %}
快速參考 quick-reference
本節包含結構化知識,用於支援與本主題相關的解譯、擷取和問答。
如需完整瞭解,此資訊應結合本頁的檔案。 兩者皆非獨立來源;頁面說明功能,本節提供額外內容,以協助去除術語、意圖、適用性和限制條件的歧義。
TL;DR
此頁面提供16種立即可用的複製貼上個人化配方,涵蓋日期、陣列、字串、條件邏輯和PQL邊緣案例,適用於Journey Optimizer電子郵件、簡訊和推播內容。
個意圖
- 複製可供使用的日期/時間模式(目前日期、倒計時、位移日期、時間顯示、週末偵測)
- 複製陣列和回圈圖樣(清單專案、前N個專案、每個專案的條件式轉譯)
- 複製字串格式模式(清除並重複使用字串、JSON引號、大寫日期元件)
- 複製條件邏輯模式(多重分支if/elseif/else、null安全屬性顯示)
- 處理PQL邊緣案例(連字鍵、數值事件ID、型別脅迫)
- Personalization配方:使用個人化編輯器語法,針對常見個人化使用案例的現成複製 — 貼上模式。 (產品特定)
formatDate:使用指定的格式模式(例如"MMMM dd, yyyy")將日期轉換為字串的函式。dateDiff:計算兩個日期之間數值差異的函式。getCurrentZonedDateTime():以時區感知格式傳回目前日期和時間的函式。topN: PQL函式,依指定的數值欄位以遞減順序排序陣列,並傳回前N個專案。 必須先透過{% let %}指派,才能在Handlebars回圈中使用。{% let %}:儲存計算值的Handlebars變數指派語法;當需要在後續Handlebars內容中參照PQL函式結果時需要。replaceAll:字串函式,取代字串中所有出現的模式;傳回新的字串,而不修改原始字串。
- 正式名稱:個人化配方 — 變體:模式,範本,範例,複製 — 貼上模式
- 請勿混淆:
{%= ... %}(PQL運算式語法 — 已評估,傳回計算值)≠{{...}}(Handlebars內插 — 呈現變數或範本運算式) - 請勿混淆:
{%#if%}/{%/if%}(Journey Optimizer條件語法,% — 大括弧) ≠{{#if}}/{{/if}}(標準Handlebars條件語法) - 不要混淆:
topN(array, field, n)(依欄位遞減排序,傳回前N個)≠head(array)(僅傳回陣列中的第一個專案) - 請勿混淆:
dayOfWeek()(用於訊息內容中,以根據日期調整顯示)≠歷程時間條件「星期」選項(用於歷程條件活動,以不同方式路由設定檔) - 請勿混淆:日期格式模式
y(行事曆年度 — 正確)≠Y(以周為基礎的年度 — 可能會在年度邊界產生非預期的結果)
- 歷程條件活動不支援
{{#each}};請使用集合管理函式在歷程條件中篩選陣列。 - 僅在PQL運算式(
{%= ... %})中支援連字屬性索引鍵的反勾逸出;純Handlebars內插({{...}})中不接受反勾號。 topN是PQL函式,必須指派給{% let %}變數,才能用作{{#each}}回圈目標。- 在
{%#if%}區塊內使用回圈變數時,請宣告具名回圈別名(例如as |order|);{%#if%}內的PQL評估程式並未解析this.status。 - 在日曆年度的
formatDate模式中使用小寫y;Y(以周為基礎的年度)可能會在年終邊界產生非預期的值。
問:個人化中的{%= ... %}和{{...}}之間有何差異?
{%= ... %}是PQL運算式語法 — 經過評估並傳回計算值(數字、字串、布林值)。 {{...}}是Handlebars內插 — 它呈現變數或範本運算式。 兩者都會出現在個人化內容中,但用途不同。
問:如何在Handlebars {{#each}}回圈中使用PQL函式結果?
使用{% let variableName = pqlFunction(...) %}將PQL函式結果指派給變數,然後使用{{#each variableName}}來反複處理。
問:{{#each}}是否可用於歷程條件活動?
沒有。 {{#each}}僅可用於訊息個人化內容(電子郵件、簡訊、推播)。 若要在歷程條件中篩選陣列,請使用集合管理函式。
問:我如何參考名稱包含連字型大小的欄位?
在PQL運算式中以反引號括住連字鍵: {%= profile.events.`order-total` > 100 %}。 純Handlebars內插不支援反引號 — 如有需要,請使用{% let %}變數作為中間步驟。
問:為什麼topN在{{#each}}回圈之前需要{% let %}?
topN是傳回PQL清單的PQL函式。 將其指派給{% let %}變數,可讓結果出現在Handlebars內容中,以便使用{{#each}}進行反複運算。