Ana içeriğe atla
Liquid, OneSignal tarafından e-posta, push, SMS, uygulama içi ve Live Activities dahil olmak üzere kanallar genelinde mesajları kişiselleştirmek için desteklenen bir şablonlama dilidir. Mesaj içeriğini dinamik olarak özelleştirmek için etiketler, filtreler ve koşullar kullanır. Liquid söz dizimi hakkında daha fazla bilgi edinmek için resmi Liquid belgelerine bakın.

Temel söz dizimi

Liquid iki ana söz dizimi yapısı kullanır:
  1. Çıktı Etiketleri: {{ ... }} — Bir değişken veya nesneden veriyi görüntüler.
  2. Mantık Etiketleri: {% ... %} — Koşullu ifadeleri veya döngüleri yürütür.

Koşullar

Operatörler

  • ==, !=, >, <, >=, <=
  • and, or
  • contains (string veya dizi)
liquid
{% if true or false and false %}
  This is true.
{% endif %}

if, elsif, else

liquid
{%- assign userLang = subscription.language -%}
{% if userLang == "es" -%}
Hola {{ first_name }}!
{%- elsif userLang == "fr" -%}
Bonjour {{ first_name }}!
{%- else -%}
Hello {{ first_name }}!
{%- endif %}

unless

liquid
{% unless level == "1" %}
  Great job getting past the first level!
{% endunless %}

Filtreler

Verilerin nasıl görüntüleneceğini ayarlamak için {{ variable | filter }} kullanarak filtreler uygulayın.

default

Özellik boşsa veya mevcut değilse varsayılan bir değer atayın.
liquid
Hello {{ first_name | default: "there" }}.

date

Tarih filtresi bir zaman damgasını başka bir tarih formatına dönüştürür. Bu söz diziminin formatı strftime ile aynıdır. Giriş, Ruby’nin Time.parse ile aynı formatı kullanır. Tarihleri etiketlerle saniye cinsinden unix zaman damgası olarak ayarlayın. Bu, hem liquid söz dizimi kişiselleştirmesinin hem de Time Operators ile segmentasyonun kullanılmasına izin verir. Örneğin, bir etiket şöyle görünebilir: bill_due : 1687968776
liquid
{{ bill_due | date: "%a, %b %d, %y" }}
{{ "now" | date: "%Y-%m-%d %H:%M" }}
Result
Wed, Jun 28, 23
liquid
{{ bill_due | date: "%Y" }}
Result
2023
Tarih biçimlendirme, iyi biçimlendirilmiş tarihler içeriyorsa string’ler üzerinde çalışır.
liquid
{{ "March 14, 2016" | date: "%b %d, %y" }}
Result
Mar 14, 16
Geçerli zamanı almak için tarih filtresiyle birlikte özel now (veya today) kelimesini iletin.
liquid
This message was sent at {{ "now" | date: "%Y-%m-%d %H:%M" }}.
Result
This message was sent at 2022-11-02 14:39.
Geçerli zaman, mesajın alıcıya gönderildiği zamana göre mesajda render edilecektir. Mesajı test ediyorsanız, test mesajının gönderildiği zamanı geçerli zaman olarak göreceksiniz.

capitalize

Bu filtre, bir string’in ilk karakterini büyük harf yapar ve kalan karakterleri küçük harfe dönüştürür.
liquid
{{ "my GREAT title" | capitalize }}
Result
My great title

round

Bu filtre bir sayıyı en yakın tam sayıya veya bir sayı argüman olarak iletilirse o sayıdaki ondalık basamak sayısına yuvarlar.
liquid
{{ 1.2 | round }}
  {{ 2.7 | round }}
{{ 183.357 | round: 2 }}
Result
1
3
183.36

pluralize

Bu filtre, verilen bir sayıya göre bir string’in tekil veya çoğul formunu döndürür. Sayı tam sayı olmalı ve string olarak sağlanabilir. Bir string’in hem tekil hem de çoğul formları sağlanmalıdır.
liquid
{{ 1 | pluralize: "singular", "plural" }}
{{ 2 | pluralize: "singular", "plural" }}
1 {{ 1 | pluralize: "person", "people" }}
2 {{ 2 | pluralize: "person", "people" }}
2 {{ "2" | pluralize: "person", "people" }}
Result
singular
plural
1 person
2 people
2 people

Yineleme

for döngüleri

Bir kod bloğunu tekrar tekrar yürütür. Bir for döngüsü içinde kullanılabilen özelliklerin tam listesi için Liquid for döngüsü belgelerine bakın.
liquid
{% for product in message.custom_data.products %}
  - {{ product.name }}
  {% else %}
    Sorry, we're sold out of all products.
  {% endfor %}
Request Body
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "custom_data": {
    "products": [
      { "name": "Sweater" },
      { "name": "Hat" },
      { "name": "Shirt" }
    ]
  }
}
Result
- Sweater
- Hat
- Shirt

(message.custom_data.products boşsa)
Üzgünüz, tüm ürünlerimiz tükendi.
Güçlü ve esnek olmasına rağmen, liquid söz diziminde for döngülerinin kullanımı bazı nadir durumlarda zayıf bildirim teslimat performansına yol açabilir. for döngülerinin kullanımına dikkat edin. Ayrıca birkaç Push Kanal alanında for döngülerinin kullanımını engellediğimizi unutmayın: contents, headings, subtitle, apns_alert ve url

limit & offset

Döngüyü belirtilen sayıda yineleme ile sınırlar. Örneğin, bir mesajda yalnızca 4 ürün göstermek istiyorsanız, gösterilen ürün sayısını belirlemek için Limits ve Offsets kullanabilirsiniz.
Data
great_numbers = [1,2,3,4,5,6]
liquid
{% for number in great_numbers limit:2 %}
  {{ number }}
{% endfor %}
Result
1 2
Döngüyü belirtilen dizinde başlatmak için bir offset değeri ekleyin:
Data
great_numbers = [1,2,3,4,5,6]
liquid
{% for number in great_numbers limit: 3 %}
  {{ number }}
{% endfor %}

{% for number in great_numbers limit: 3 offset: 3 %}
  {{ number }}
{% endfor %}
Result
1 2 3
4 5 6

where

Yalnızca belirli bir özellik değerine sahip nesneleri içeren bir dizi oluşturur veya varsayılan olarak herhangi bir doğru değer. Bu örnekte, bir ürün listeniz olduğunu ve mutfak ürünlerinizi ayrı olarak göstermek istediğinizi varsayalım. where kullanarak, yalnızca kitchen type’ına sahip ürünleri içeren bir dizi oluşturabilirsiniz.
Data
products = [
  {name:"Vacuum", type:"electronics"},
  {name:"Spatula", type:"kitchen"},
  {name:"Television", type:"electronics"},
  {name:"Garlic press", type:"kitchen"}
]
liquid
All products:
{% for product in products %}
- {{ product.name }}
{% endfor %}

{% assign kitchen_products = products | where: "type", "kitchen" %}

Kitchen products:
{% for product in kitchen_products %}
- {{ product.name }}
{% endfor %}
Result
All products:
  - Vacuum
  - Spatula
  - Television
  - Garlic press

Kitchen products:
- Spatula
- Garlic press

String Manipülasyonu

Mesajlarda etiket değerlerinin veya satır içi string’lerin nasıl görüntüleneceğini ayarlamak için string filtreleri uygulayın.
KomutAçıklamaÖrnekÖrnek Çıktı
replaceBir alt string’i başka bir string ile değiştirir.{{ 'hello world' | replace: 'world', 'there' }}hello there
capitalizeBir string’in ilk harfini büyük harf yapar.{{ 'hello' | capitalize }}Hello
upcaseBir string’i büyük harfe dönüştürür.{{ 'hello' | upcase }}HELLO
downcaseBir string’i küçük harfe dönüştürür.{{ 'HELLO' | downcase }}hello
stripBir string’den baştaki ve sondaki boşlukları kaldırır.{{ ' hello ' | strip }}hello
strip_htmlBir string’den tüm HTML etiketlerini kaldırır.{{ '<p>hello</p>' | strip_html }}hello
truncateBir string’i belirtilen uzunlukta kısaltır, gerekirse üç nokta (…) ekler.{{ 'This is a long sentence' | truncate: 10 }}This is a…
truncatewordsBelirli sayıda kelimeden sonra bir string’i keser.{{ 'This is a long sentence' | truncatewords: 2 }}This is…
replace_firstBir alt string’in ilk oluşumunu değiştirir.{{ 'hello world' | replace_first: 'world', 'there' }}hello there
prependBaşka bir string’in başına bir string ekler.{{ 'world' | prepend: 'hello ' }}hello world
appendBaşka bir string’in sonuna bir string ekler.{{ 'hello' | append: ' world' }}hello world
lstripBir string’den baştaki boşlukları kaldırır.{{ ' hello' | lstrip }}hello
rstripBir string’den sondaki boşlukları kaldırır.{{ 'hello ' | rstrip }}hello

SSS

Değiştirme neden çalışmıyor?

  • Uygulama İçi Mesajlar özellik değiştirmeyi desteklemez.
  • “Send Test Message” kullanılırken etiket değiştirme çalışmaz.
  • Etiket anahtarları alfasayısal olmalı veya _ ve - kullanmalıdır (nokta veya boşluk yok).
  • Değiştirme önizleme modunda görünmez — test etmek için gerçek bir mesaj gönderin.

default mi yoksa if/else mi kullanmalıyım?

Yalnızca değişken değerinin bir geri dönüş değerine ihtiyacı varsa ve çevreleyen metin aynı kalıyorsa default filtresini kullanın.
liquid
Hello {{ name | default: "there" }}!
Result (name = "Jon")
Hello Jon!
Result (name boşsa)
Hello there!
Çevreleyen metin, noktalama işaretleri veya cümle yapısının da değişkenin var olup olmadığına göre değişmesi gerektiğinde if/else koşullu mantığını kullanın.
liquid
{% if name %}{{ name }}, shop your favorites!{% else %}Shop your favorites!{% endif %}
Result (name = "Jon")
Jon, shop your favorites!
Result (name boşsa)
Shop your favorites!
Cümle yapısı değiştiğinde default kullanmayın. Örneğin, {{ name | default: "Shop your favorites" }}, shop your favorites ifadesi, isim boş olduğunda “Shop your favorites, shop your favorites” şeklinde işlenecektir. Geri dönüş değeri yalnızca değişkenden fazlasını değiştiriyorsa if/else kullanın.

Boşluk ve yeni satırlar nasıl kontrol edilir?

Çevredeki boşlukları kırpmak için tire kullanın: {{- ... -}}, {%- ... -%}. Daha fazla ayrıntı için Boşluk kontrolü’ne bakın.

Kullanıcı tarafından oluşturulan içerik nasıl işlenir?

Liquid ayrıştırmasını önlemek için kullanıcı tarafından oluşturulan metni {% raw %} ve {% endraw %} içine sarın. “raw” söz dizimi’ne bakın.
{
  "contents": {
    "en": "{% raw %} Your user-generated content with invalid characters like {{ {% endraw %}"
  }
}

İlgili sayfalar

Mesaj kişiselleştirme

Liquid, Data Feeds ve özel etkinlikler dahil tüm kişiselleştirme seçeneklerine genel bakış.

Data Feeds

Gönderim zamanında API’lerinizden mesajlara gerçek zamanlı veri çekin.

Etiketler

Segmentasyon ve Liquid kişiselleştirme için kullanıcılara anahtar-değer çiftleri depolayın.

Şablonlar

Liquid kişiselleştirmesi yerleşik yeniden kullanılabilir mesaj şablonları oluşturun.