מדריך Liquid המלא
Joryio מתאימה הודעות באופן אישי באמצעות Liquid - אתם כותבים
מצייני מקום כמו {{ user.firstName }} ומסננים כמו {{ price | currency }}, והם נפתרים
לערך המתאים לכל נמען בזמן השליחה. העמוד הזה הוא המדריך המלא: כל מרחבי השמות של המשתנים וכל
המסננים המותאמים של Joryio, עם דוגמאות.
חדשים ב‑Liquid של Joryio? התחילו מתבניות Liquid ליסודות, וחזרו לכאן כשתצטרכו את הפרטים.
כל המסננים שלמטה רשומים במנוע Liquid משותף אחד שמשרת את כל נתיבי העיבוד, ולכן אותה תבנית מעובדת באופן זהה בתבניות אימייל, SMS, WhatsApp, פוש, בתוך האפליקציה ו‑webhook - בקמפיינים, במסעות ובתצוגה המקדימה כאחד. מה שרואים בתצוגה המקדימה הוא בדיוק מה שכל ערוץ שולח.
שתי התנהגויות מקלות שכדאי להכיר:
- משתנה ללא ערך מוצג כטקסט ריק - לעולם לא כשגיאה.
- מסנן לא מוכר משאיר את הערך ללא שינוי במקום להיכשל.
משתנים
מרחבי השמות הזמינים, במבט אחד. עקבו אחרי הקישורים לפרטים המלאים של כל אחד.
| מרחב שמות | מה הוא מכיל | פרטים |
|---|---|---|
user.firstName, user.lastName, user.email, user.phone, user.id, user.externalId, user.whatsappName | מאפייני ברירת המחדל של איש הקשר | משתני הודעה |
user.custom.<attribute> | כל מאפיין מותאם של איש הקשר (למשל user.custom.plan) | משתני הודעה |
trigger.properties.<field> | איך הם נכנסו למסע - אירוע הכניסה, קבוע לכל הריצה | משתני הודעה |
event.properties.<field>, event.name | הדבר האחרון שהם עשו - האירוע האחרון שקידם את המסע | משתני הודעה |
reply.text, reply.type, reply.profile.name | קיצורים ידידותיים לתשובה הנכנסת האחרונה של איש הקשר ב‑WhatsApp או ב‑SMS | משתני הודעה |
blocks.<slug> | בלוק תוכן לשימוש חוזר, המעובד במקומו | בלוקי תוכן |
unsubscribe_url, preferences_url, resubscribe_url | קישורי הרשמה ייחודיים לכל נמען (אימייל, SMS, סשן WhatsApp) | תבניות Liquid |
המסננים products ו‑entity | רשומות מקטלוג המוצרים או מישות מותאמת מתוך סינון שמור | הזנות קטלוג למטה |
trigger.*, event.* ו‑reply.* זמינים רק בתוך מסע; כל השאר פועלים בכל מקום.
מסננים
משרשרים מסננים עם | ומעבירים ארגומנטים אחרי :. למשל:
{{ user.firstName | capitalize | default: "חבר" }}
{{ order.total | currency: "EUR" }}
טקסט
| מסנן | מה הוא עושה | דוגמה ← פלט |
|---|---|---|
capitalize | הופך את האות הראשונה לגדולה ואת שאר המחרוזת לקטנה | {{ "mAYA" | capitalize }} ← Maya |
uppercase | ממיר את כל המחרוזת לאותיות גדולות | {{ "sale" | uppercase }} ← SALE |
lowercase | ממיר את כל המחרוזת לאותיות קטנות | {{ "SALE" | lowercase }} ← sale |
truncate | חותך מחרוזת לאורך נתון (ברירת מחדל 50) ומוסיף סיומת (ברירת מחדל ...). הסיומת מתווספת אחרי החיתוך, מעבר לאורך | {{ "The quick brown fox jumps" | truncate: 9 }} ← The quick... |
strip_html | מסיר תגי HTML | {{ "<b>Sale</b> today" | strip_html }} ← Sale today |
url_encode | מקודד מחרוזת ל‑URL (לבניית קישורים) | {{ "red shoes" | url_encode }} ← red%20shoes |
pluralize | מקבל מספר ומחזיר את צורת היחיד או הרבים של המילה. הרבים כברירת מחדל הוא היחיד + s; ארגומנט שלישי לצורות רבים חריגות | 3 {{ 3 | pluralize: "item" }} ← 3 items |
default | ערך גיבוי כשהערך הוא null, לא מוגדר או מחרוזת ריקה | {{ user.firstName | default: "חבר" }} ← חבר (כשהמאפיין ריק) |
מספרים וכסף
| מסנן | מה הוא עושה | דוגמה ← פלט |
|---|---|---|
currency | מעצב מספר כסכום כסף. קוד המטבע כברירת מחדל הוא USD; אפשר להעביר כל קוד ISO. העיצוב לפי en-US (סימן המטבע לפני, פסיקים לאלפים) | {{ 1249.5 | currency }} ← $1,249.50 · {{ order.total | currency: "EUR" }} ← €49.90 |
תאריכים
| מסנן | מה הוא עושה | דוגמה ← פלט |
|---|---|---|
date_format | מעצב תאריך. סגנונות: short (ברירת מחדל), long, full. כשמתקבל סגנון לא מוכר, נעשה שימוש ב‑short. שמות החודשים והימים באנגלית (en-US) | {{ order.createdAt | date_format }} ← Jul 12, 2026 · {{ order.createdAt | date_format: "long" }} ← July 12, 2026 · "full" ← Sunday, July 12, 2026 |
add_days | מוסיף N ימים לתאריך (מספר שלילי מחסיר). מחזיר חותמת זמן ISO - שרשרו date_format כדי להפוך אותה לקריאה | {{ order.createdAt | add_days: 7 | date_format }} ← Jul 19, 2026 |
time_ago | זמן יחסי בשפה אנושית (ברזולוציית שנה/חודש/שבוע/יום/שעה/דקה/שנייה) | {{ user.custom.lastOrderAt | time_ago }} ← 3 days ago |
מערכים
| מסנן | מה הוא עושה | דוגמה ← פלט |
|---|---|---|
join | מאחד פריטי מערך למחרוזת. המפריד כברירת מחדל הוא , | {{ names | join }} ← Ana, Ben, Gal · {{ names | join: " / " }} ← Ana / Ben / Gal |
map | שולף מאפיין אחד מכל פריט ומחזיר מערך חדש | {{ items | map: "name" | join }} ← Mug, Tee |
first | הפריט הראשון | {{ items | first }} |
last | הפריט האחרון | {{ items | last }} |
size | אורך של מערך או של מחרוזת (0 לכל דבר אחר) | {{ cart.items | size }} ← 3 |
count | מספר הפריטים במערך (0 אם זה לא מערך) | {{ cart.items | count }} ← 3 |
צבירה וסינון
המסננים האלה פועלים על מערכים של רשומות - פריטי עגלה, הזמנות או הזנות קטלוג. כל ארגומנט
field תומך בנתיבי נקודה לתוך אובייקטים מקוננים (למשל "price.amount").
| מסנן | מה הוא עושה | דוגמה ← פלט |
|---|---|---|
sum | מסכם שדה מספרי בכל פריטי המערך (ערכים חסרים נספרים כ‑0) | {{ orders | sum: "totalAmount" }} ← 540 |
avg | ממוצע של שדה מספרי (0 למערך ריק) | {{ orders | avg: "totalAmount" }} ← 180 |
max | הערך המספרי הגדול ביותר של שדה (ערכים לא מספריים מדולגים; 0 אם אין) | {{ products | max: "price" }} ← 129.9 |
min | הערך המספרי הקטן ביותר של שדה | {{ products | min: "price" }} ← 19.9 |
where | מסנן את המערך. שלוש צורות קריאה: where: "featured" משאיר פריטים שהערך שלהם נחשב true; where: "category", "shoes" משאיר פריטים שערכם שווה לערך הנתון; where: "price", "gt", 100 משווה באמצעות אופרטור: eq, neq, gt, gte, lt, lte, contains, in (גם צורות הסימנים ==, !=, >, >=, <, <= פועלות) | {{ items | where: "category", "shoes" | count }} ← 2 |
sort | ממיין לפי שדה, בסדר asc (ברירת מחדל) או desc. בלי שדה - ממיין את הערכים עצמם | {{ products | sort: "price", "desc" | first }} ← המוצר היקר ביותר |
דוגמה מלאה - שלוש ההזמנות האחרונות של הנמען:
{% assign recent = orders | sort: 'createdAt', 'desc' %}
{% for order in recent limit: 3 %}
- {{ order.createdAt | date_format }}: {{ order.totalAmount | currency }}
{% endfor %}
סך הקניות: {{ orders | sum: 'totalAmount' | currency }}
הזנות קטלוג
שני מסננים מושכים אוספי רשומות לתוך הודעה, וכל אחד מהם מגובה בסינון שמור
בסביבת העבודה שלכם. שניהם מחזירים מערך - משתמשים בהם בתג assign ואז עוברים על התוצאה בלולאה.
products - קטלוג המוצרים של החנות
מושך מקטלוג המוצרים המסונכרן (Shopify / WooCommerce / Magento) דרך סינון מוצרים. יש קטלוג מוצרים אחד, ולכן הארגומנט הוא שם הסינון:
{% assign products = 'featured' | products %}
{% for item in products %}
- {{ item.name }}: {{ item.price | currency }}
{% endfor %}
entity - הזנת ישות מותאמת
מושך רשומות מישות מותאמת. הארגומנט הראשון הוא שם הישות, והשני (אופציונלי) הוא שם הסינון:
{% assign episodes = 'tv_series' | entity: 'latest' %}
{% for item in episodes %}
- {{ item.name }}
{% endfor %}
אפשר להעביר משתנים לסינון ישות שמקבל פרמטרים - למשל להעביר אליו את אירוע הכניסה של המסע:
{% assign items = 'products' | entity: 'product_by_id', trigger %}
הערות על ההתנהגות:
- סינונים שזהים לכל הנמענים (ללא מסנני מאפייני משתמש או הקשר) נשמרים במטמון לכ‑5 דקות, כך ששליחות המוניות אינן מריצות שאילתה מחדש לכל נמען. סינוני ישויות מותאמים אישית מחושבים מחדש לכל נמען.
- אם סינון הישות או המוצרים לא נמצא (או שהשאילתה נכשלה), המסנן מחזיר מערך ריק -
לולאת ה‑
forשלכם פשוט לא מציגה כלום, לעולם לא שגיאה. - האפשרויות Product catalog ו־Custom entity בבורר ההתאמה האישית בונות עבורכם את קטע
ה‑
assign(ראו משתני הודעה).
catalogהמסנן הישן catalog הוא שם חלופי שהוצא משימוש עבור entity, אך הוא עדיין פועל כדי
שתבניות קיימות לא יישברו. מעתה העדיפו entity לישויות מותאמות ו‑products לקטלוג החנות.
במה Joryio שונה מ‑Liquid סטנדרטי
כמה מסננים מתנהגים בכוונה אחרת מהמסננים המקבילים ב‑Shopify/LiquidJS:
capitalizeגם הופך את שאר המחרוזת לאותיות קטנות ("mAYA"הופך ל‑Maya, לא ל‑MAYA).defaultמתייחס למחרוזת ריקה כאל ערך חסר, כך ש‑{{ user.firstName | default: "חבר" }}משתמש בערך הגיבוי גם כשהמאפיין קיים אך ריק.truncateמוסיף את הסיומת אחרי אורך החיתוך (Liquid סטנדרטי סופר את שלוש הנקודות בתוך האורך).whereו‑sortמרחיבים את המסננים המובנים: הם מקבלים את צורות הקריאה הסטנדרטיות וגם מוסיפים אופרטורים להשוואה, כיוון מיון ונתיבי נקודה בשדות.
Liquid סטנדרטי ממשיך לעבוד
כל מה שלמעלה נוסף על גבי LiquidJS הסטנדרטי: התגים המובנים -
{% if %} / {% elsif %} / {% else %}, {% for %}, {% assign %}, {% case %}
וחבריהם - והמסננים המובנים (upcase, downcase, date, replace, split, plus,
times ועוד רבים) עובדים בכל תבנית של Joryio. כשמסנן של Joryio חולק שם עם מסנן מובנה
(capitalize, default, where, sort, join, map, first, last, size),
הגרסה של Joryio המתוארת בעמוד הזה היא זו שרצה. הרשימה המלאה של המסננים המובנים נמצאת
בכתובת liquidjs.com/filters/overview.html.
קישורים קשורים
- תבניות Liquid - מבוא ובורר ההתאמה האישית
- משתני הודעה -
trigger.*,event.*ו‑reply.*במסעות - בלוקי תוכן - קטעים לשימוש חוזר דרך
blocks.slug