Liquid değişkenleri, Liquid'de tanımlanan ve bir iş akışı çalıştığında GraphQL Admin API'sinden alınan değerlerle değiştirilen yer tutuculardır. Değişkenler; iş akışlarınızda yer alan müşteriler, siparişler ve ürünler ile ilgili sipariş numarası, sipariş fiyatı veya müşteri adı gibi özellikleri açıklayabilir. Değişkenler, iş akışınızdaki mantığı kontrol etmek için koşullarda veya bir eylemden veri çıkışı almak için kullanılabilir.
Değişken ekle bağlantısını içeren herhangi bir metin alanına Liquid kullanarak değişkenler ekleyebilirsiniz. İlgili alanın altındaki Değişken ekle bağlantısına tıklayın ve ardından listeden bir değişken seçin.
Değişken ekle listesindeki değişkenler filtrelenir. Böylece yalnızca tetikleyiciler gibi, geçerli adımdan önceki adımlar tarafından döndürülen değişkenleri kullanırsınız. Örneğin, Sipariş Oluşturuldu tetikleyicisi, Admin API'dan değişken olarak eklenebilecek sipariş ve mağaza kaynakları sağlar. Listeden bir değişken seçtikten sonra bu değişken, metin kutusuna düzgün biçimlendirilmiş Liquid olarak eklenir.
Metin alanına doğrudan Liquid de yazabilirsiniz. Örneğin, Shopify yöneticisinden order-123 gibi bir sipariş dizesi görüntülemek için {{ order.name }} değişkenini kullanabilirsiniz.
Flow, Liquid için kullanılan verileri almak üzere Admin API'yi kullandığından, değişken söz diziminde camel case kullanılır. Camel case değişkenlerinde ilk kelime küçük harfle, sonraki kelimeler ise büyük harfle başlar (ör. firstName veya canMarkAsPaid). Örneğin, bir ürünün oluşturulma tarihine erişmek için {{ product.createdAt }} girin. Camel case kullanmayan bir Shopify temasında Liquid söz dizimini kullanırsanız {{ product.created_at }} girmeniz gerekir.
Koşullu ve yinelemeli Liquid etiketleri
Liquid etiketleri, değişkenlerle birlikte aşağıdaki işlevleri yerine getirmek için kullanılabilir:
Sipariş toplamının 100 $'dan büyük olup olmadığını belirleme gibi koşullu ifadeler yazma.
Bir siparişteki her satır öğesi için veri çıktısı alma gibi bir nesne listesinde yineleme yapma.
Bu ifadeleri yazmak ve nesneler arasında yineleme yapmak için Liquid etiketlerini kullanabilirsiniz.
Örneğin aşağıdaki Liquid, sipariş toplamı 100 $'dan büyükse sipariş numarasını görüntüler:
{% if order.totalPriceSet.shopMoney.amount > 100 %}
Order number: {{ order.name }}
{% endif %}
Siparişteki satır öğeleri gibi bir nesne listesinde yineleme yapmak için for döngüsü de kullanabilirsiniz. Örneğin aşağıdaki Liquid, bir siparişteki her satır öğesinin adını görüntüler:
{% for li in order.lineItems %}
{{ li.title }}
{% endfor %}
Flow, aşağıdaki Liquid koşullu (veya kontrol akışı) etiketlerini destekler:
Filtreleri kullanarak Liquid'deki değişken verilerini dönüştürebilirsiniz. Flow, tüm açık kaynak Liquid filtrelerini destekler.
Örneğin aşağıdaki Liquid, sipariş adından bir ön eki kaldırır ve kalanı verir: {{ order.name | remove: "Order-" }}
Filtrelerde Liquid değişkenlerini kullanmayla ilgili dikkat edilmesi gerekenler
Filtreleri kullanarak değişkenleri dönüştürmeden önce aşağıdaki hususları gözden geçirin:
Flow, bazı filtrelerde kullanılabilen nokta gösterimini desteklemez. Örneğin Flow, {{ order.lineItems | size }} kodunu destekler ancak {{ order.lineItems.size }} kodunu desteklemez.
Flow, meta alanlar için nokta gösterimini desteklemez. Örneğin, {{ order.metafields.custom.hold_note }} kodunu kullanamazsınız. Bunun yerine, örneklerde belirtildiği gibi meta alanlar üzerinde döngü yapmanız gerekir.
Flow, bir listedeki öğelere erişmek için dizin kullanmayı desteklemez. Örneğin, {{ order.lineItems[0].title }} kodunu kullanamazsınız. Bunun yerine, örneklerde belirtildiği gibi satır öğeleri üzerinde döngü yapmanız gerekir.
Tarih filtreleri
Standart Liquid filtrelerine ek olarak Flow, Zamanlanmış zaman tetikleyicisini ve Veri al özelliklerini desteklemek için başka bir tarihe göre bir tarih elde etmenizi sağlayan tarih filtreleri sunar. Bu filtreler şunlardır: date_minus ve date_plus. Örneğin:
Gelecekte bir gün sonraki tarihi döndürmek için: {{ "now" | date_plus: "1 day" }}
Geçmişte bir gün önceki tarihi döndürmek için: {{ "now" | date_minus: "1 day" }}
Bu filtreler, süre birimi olarak hem tekil (second gibi) hem de çoğul (seconds gibi) olmak üzere second, minute, day, week, month ve year ifadelerini kabul eder. Ayrıca aşağıdaki özelleştirilebilir birim türlerini de sağlayabilirsiniz:
Saniye sayısını temsil eden bir tam sayı: {{ "now" | date_minus: 3600 }} (burada 3600, 1 saate eş değerdir).
Bir ISO8601 süre dizesi: {{ "now" | date_minus: "P1Y2D" }} (burada P1Y2D, 1 yıl 2 gün anlamına gelir).
Kriptografik filtreler
Flow, karma oluşturma ve Karma Tabanlı Mesaj Doğrulama Kodları (HMAC'ler) oluşturma için kriptografik filtreler sağlar. Bu filtreler; benzersiz tanımlayıcılar veya sağlama toplamları oluşturmak ya da belirli karma biçimleri gerektiren üçüncü taraf sistemlerle entegre olmak için kullanışlıdır.
Karma oluşturma filtreleri
Shopify Flow, aşağıdaki karma oluşturma filtresi türlerini destekler:
blake3: Bir BLAKE3 karması oluşturur (genel kullanım için önerilir).
Genel karma oluşturma amaçları ve yeni uygulamalar için eski algoritmalara kıyasla üstün performans ve güvenlik sunduğundan blake3 kullanmanız gerekir. Ancak sha256, sha1 ve md5, üçüncü taraf sistemlerle uyumluluk için kullanılabilir.
Bir iş akışında yer alan müşteri, sipariş ve ürün için URL'leri çıkarmak istiyorsunuz.
# Output the base Admin URL for your store
https://admin.shopify.com/store/{{ shop.myShopifyDomain | replace: ".myshopify.com", "" }}
# Assign the base Admin url to a variable named base_url:
{%- capture base_url -%}https://admin.shopify.com/store/{{ shop.myShopifyDomain | replace: ".myshopify.com", "" }}{%- endcapture -%}
# Customer from a Customer trigger:
{{ base_url }}/customers/{{ customer.legacyResourceId }}
# Customer without the base_url:
https://admin.shopify.com/store/{{ shop.myShopifyDomain | replace: ".myshopify.com", "" }}/customers/{{ customer.legacyResourceId }}
# Customer from an Order trigger:
{{ base_url }}/customers/{{ order.customer.legacyResourceId }}
# Order:
{{ base_url }}/orders/{{ order.legacyResourceId }}
# Product:
{{ base_url }}/products/{{ product.legacyResourceId }}
# Product Variant:
{{ base_url }}/products/{{ product.legacyResourceId }}/variants/{{ productVariant.legacyResourceId }}
# Example showing a clickable link in HTML, making use of the URL:
<a href="{{ base_url }}/products/{{ product.legacyResourceId }}">{{ product.title }}</a>
Etiket listesini meta alana dönüştürme
Bir etiket grubunu, tek satırlı metin alanları listesi olan bir meta alana dönüştürmek istiyorsunuz. Mağazaya ürün eklendi tetikleyicisini kullanarak bir iş akışı oluşturuyor ve Ürün meta alanını güncelle eylemini kullanıyorsunuz. Ürün meta alanını güncelle eyleminin Değer bölümüne aşağıdaki liquid kodunu ekliyorsunuz. Bu örnekte, değerleri yalnızca ürün oluşturulduğunda bir kez ayarlamanız gerektiği ve ürünün ilgili iki etiketi (color:red ve color:orange) olduğu varsayılmaktadır.
Tek satırlı bir metin alanı listesini ayarlamaya yönelik örnek liquid.
Bir müşteri, bir siparişte 500 $'dan fazla harcama yaptığında bir çalışana e-posta göndermek için iş akışı oluşturmak istiyorsunuz. Sipariş oluşturuldu tetikleyicisini kullanarak bir iş akışı oluşturuyor, sipariş toplamı 500 $'ın üzerindeyse doğru (true) olan bir koşul ayarlıyor ve Dahili e-posta gönder eylemini kullanıyorsunuz. Dahili e-posta gönder eyleminin Mesaj bölümünde aşağıdaki değişkenleri kullanıyorsunuz.
Müşteri bilgilerini sağlamak için değişken kullanımına örnek.
Girdi
Çıktı
Please send a personal thank you note to {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }}) for placing an order for $ {{ order.totalPriceSet.shopMoney.amount }}.
Lütfen 763,42 $ tutarında sipariş verdiği için Jeanne Dupont'a (jeanne@example.com) kişisel bir teşekkür notu gönderin.
Stoku azalan bir ürün için dinamik e-posta mesajı yazma
Ürün envanteri azaldığında bir personeli bilgilendirmeniz ve daha fazla stok için sipariş verilmesi gerektiğine karar veriyorsunuz. Envanter adedi değişti tetikleyicisiyle başlayan bir iş akışı oluşturuyor ve önceki envanter adedi 10 veya daha az ise doğru (true) olan bir koşul ayarlıyorsunuz. Dahili e-posta gönder eyleminin Mesaj bölümünde aşağıdaki değişkenleri kullanıyorsunuz.
Ürün ayrıntılarını sağlamak için değişken kullanımına örnek.
Girdi
Çıktı
Please reorder {{ product.title }}. Email owner@store.com to verify that they've received the purchase order.
Lütfen Yüksek Bel Tayt - Siyah ürününü yeniden sipariş edin. Satın alma emrini aldıklarını doğrulamak için owner@example.com adresine e-posta gönderin.
Personele hileli bir sipariş hakkında bildirim göndermek için dinamik e-posta mesajı yazma
Yüksek risk seviyesine sahip siparişleri iptal etmek, ancak personelinizin siparişi manuel olarak iptal etmesini tercih etmek istiyorsunuz. Sipariş oluşturuldu tetikleyicisiyle başlayan bir iş akışı oluşturuyor ve siparişin risk seviyesi yüksek ise doğru (true) olan bir koşul ayarlıyorsunuz. Dahili e-posta gönder eyleminin Mesaj bölümünde aşağıdaki değişkenleri kullanıyorsunuz.
Hileli bir sipariş hakkında bilgi sağlamak için değişken kullanımına örnek.
Girdi
Çıktı
Our Shopify store has received an order with a high risk of fraud. We would like to cancel this order right away, before it is sent to production:
{{ order.name }}
{{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }}
{{ order.email }}
Please confirm the new order status. Thanks!
Shopify mağazamıza sahtekarlık riski yüksek bir sipariş geldi. Bu siparişi üretime gönderilmeden önce, hemen iptal etmek istiyoruz:
#1001
Dupont, Jeanne
jeanne@example.com
Lütfen yeni sipariş durumunu teyit edin. Teşekkürler!
For döngüsü kullanarak bir siparişin satır öğelerini çıkarma
Bir sipariş alındığında, sipariş edilen ürünleri içeren bir mesaj göndermek faydalı olabilir. Bunu, bir kod bloğunu tekrar tekrar yürüten for döngüsü kullanarak yapabilirsiniz. Değişkenleri destekleyen metin alanları for döngülerini ve forloop nesnesini de destekler.
Örneğin, bir siparişteki tüm SKU'ların ve adetlerin listesini döndüren bir iş akışı oluşturmak istediğinizi varsayalım. Dahili e-posta gönder eyleminin Mesaj bölümünde aşağıdaki değişkenleri kullanırsınız.
Sipariş bilgilerini sağlamak için "for" döngüsü kullanımına bir örnek.
Girdi
Çıktı
Order summary:
{% for a in order.lineItems %}
{{a.sku}} ( {{a.quantity}} )
{% endfor %}
Ek bilgiler içeren bir "for" döngüsü kullanarak siparişin satır öğelerini çıktı olarak alma
E-postaya ürün adı, SKU'lar, ürün başına fiyat ve müşterinin kargo bilgileri dahil olmak üzere daha fazla bilgi eklemeye karar verdiğinizi varsayalım. Dahili e-posta gönder eyleminin Mesaj bölümünde aşağıdaki değişkenleri kullanırsınız.
Daha kapsamlı sipariş bilgileri sağlamak için "for" döngüsü kullanımına bir örnek.
Girdi
Çıktı
Order summary:
{% for a in order.lineItems %}
Product: {{a.title}}
SKU: {{a.sku}}
Price (per unit): ${{a.originalUnitPriceSet.shopMoney.amount}}
Quantity: {{a.quantity}}
{% endfor %}
Sipariş özeti:
Ürün: Yüksek Belli Tayt - Siyah
SKU: 8987097979
Fiyat (birim başına): 8,49 $
Adet: 5
Ürün: Spor Çorabı - Mavi
SKU: 888998898B
Fiyat (birim başına): 5,61 $
Adet: 2
Bir "for" döngüsünü "if" ifadesiyle birleştirerek bazı satır öğelerini çıktı olarak alma
Belirli bir satıcı tarafından tedarik edilen satılmış ürünleri takip etmeniz gerektiğini varsayalım. Dahili e-posta gönder eyleminin Mesaj bölümünde aşağıdaki değişkenleri kullanır ve for döngünüze bir if ifadesi eklersiniz.
Belirli satıcılara yönelik sipariş bilgilerini sağlamak için "for" döngüsü ve "if" ifadesi kullanımına bir örnek.
Girdi
Çıktı
Acme product sold:
{% for x in order.lineItems %}
{% if x.vendor == 'acme-vendor' %}
Product name: {{x.title}}
SKU: {{x.sku}}
{% endif %}
{% endfor %}
Acme ürünü satıldı:
Ürün adı: Yüksek Belli Tayt - Siyah
SKU: 8987097979
Shopify Flow'da karmaşık veri nesneleri
Flow, GraphQL Admin API içindeki neredeyse tüm verilere erişmenize olanak tanır. Buna, listeler ve nesneler gibi karmaşık veri nesneleri de dahildir. Ancak bu nesnelerle yapabilecekleriniz konusunda bazı sınırlamalar vardır. Bu bölümde bu sınırlamalar özetlenmekte ve bunlarla nasıl çalışılacağına dair örnekler sunulmaktadır.
Listeleri ve nesneleri doğrudan çağırmak yerine, liste üzerinde döngü oluşturmalı ve yalnızca istediğiniz alanları dahil etmelisiniz.
Örneğin, {{ order.lineItems }} öğesini doğrudan çağırmak yerine, belirli alanları çağırmak için aşağıdaki biçimi kullanın. Bu örnekler, listeyi veya nesneyi doğrudan çağırarak dahil edilecek tüm alanları içerir. İhtiyaç duyduğunuz alanları kopyalayıp yapıştırın.
Metin
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}