Liquid ویری ایبلز دراصل Liquid میں متعین کردہ پلیس ہولڈرز ہیں جنہیں ورک فلو کے رن ہونے پر GraphQL Admin API کی ویلیوز سے تبدیل کر دیا جاتا ہے۔ ویری ایبلز ان کسٹمرز، آرڈرز، اور پروڈکٹس کے ایٹری بیوٹس (attributes) کو بیان کر سکتے ہیں جو آپ کے ورک فلو میں شامل ہیں، جیسے کہ آرڈر کا نمبر، آرڈر کی قیمت، یا کسٹمر کا نام۔ ویری ایبلز کو آپ کے ورک فلو میں منطق (logic) کو کنٹرول کرنے کے لیے کنڈیشنز (conditions) میں، یا کسی ایکشن (action) سے ڈیٹا آؤٹ پٹ کرنے کے لیے استعمال کیا جا سکتا ہے۔
Liquid کا استعمال کرتے ہوئے ورک فلو میں ویری ایبلز شامل کرنا
آپ ویری ایبل شامل کریں کا لنک رکھنے والی کسی بھی ٹیکسٹ فیلڈ میں Liquid کا استعمال کرتے ہوئے ویری ایبلز شامل کر سکتے ہیں۔ متعلقہ فیلڈ کے نیچے ویری ایبل شامل کریں لنک پر کلک کریں، اور پھر فہرست میں سے ایک ویری ایبل کا انتخاب کریں۔
ویری ایبل شامل کریں کی فہرست میں موجود ویری ایبلز کو فلٹر کیا جاتا ہے، تاکہ آپ صرف وہی ویری ایبلز استعمال کریں جو موجودہ قدم سے پہلے کے مراحل، جیسے ٹرگرز، کے ذریعے واپس کیے گئے ہیں۔ مثال کے طور پر، Order Created (آرڈر بنایا گیا) ٹرگر Admin API سے آرڈر اور شاپ کے ریسورسز فراہم کرتا ہے جنہیں ویری ایبلز کے طور پر داخل کیا جا سکتا ہے۔ فہرست سے ویری ایبل منتخب کرنے کے بعد، یہ ٹیکسٹ باکس میں درست طریقے سے فارمیٹ شدہ Liquid کے طور پر شامل ہو جاتا ہے۔
آپ ٹیکسٹ فیلڈ میں براہ راست Liquid بھی لکھ سکتے ہیں۔ مثال کے طور پر، آپ Shopify ایڈمن سے آرڈر سٹرنگ (string)، جیسے کہ order-123، کو ڈسپلے کرنے کے لیے ویری ایبل {{ order.name }} استعمال کر سکتے ہیں۔
چونکہ Flow، Liquid کے لیے استعمال ہونے والا ڈیٹا حاصل کرنے کے لیے Admin API کا استعمال کرتا ہے، اس لیے ویری ایبل کا سنٹیکس camel case (کیمل کیس) استعمال کرتا ہے۔ کیمل کیس ویری ایبلز کا پہلا لفظ چھوٹے حرف (lowercase) سے شروع ہوتا ہے، اور بعد میں آنے والے الفاظ بڑے حرف (uppercase) سے شروع ہوتے ہیں، جیسے کہ firstName یا canMarkAsPaid۔ مثال کے طور پر، جس تاریخ کو کوئی پروڈکٹ بنائی گئی تھی اس تک رسائی کے لیے، {{ product.createdAt }} درج کریں۔ اگر آپ Shopify تھیم میں Liquid سنٹیکس استعمال کرتے ہیں، جو کہ کیمل کیس استعمال نہیں کرتی، تو آپ {{ product.created_at }} درج کریں گے۔
کنڈیشنل اور ایٹریشن کے Liquid ٹیگز
درج ذیل فنکشنز انجام دینے کے لیے ویری ایبلز کے ساتھ Liquid ٹیگز استعمال کیے جا سکتے ہیں:
کنڈیشنل سٹیٹمنٹس لکھنا، جیسے کہ یہ تعین کرنا کہ آیا آرڈر کا ٹوٹل $100 سے زیادہ ہے۔
آبجیکٹ کی فہرست میں سے باری باری گزریں، جیسے کہ کسی آرڈر میں ہر لائن آئٹم کے لیے ڈیٹا آؤٹ پٹ کرنا۔
آپ یہ اسٹیٹمنٹ لکھنے اور آبجیکٹ میں سے باری باری گزرنے کے لیے Liquid ٹیگ کا استعمال کر سکتے ہیں۔
مثال کے طور پر، اگر آرڈر کا کل بل $100 سے زیادہ ہو تو درج ذیل Liquid آرڈر کا نمبر ڈسپلے کرتا ہے:
{% if order.totalPriceSet.shopMoney.amount > 100 %}
Order number: {{ order.name }}
{% endif %}
آپ آبجیکٹ کی فہرست میں سے باری باری گزرنے کے لیے for loop کا استعمال بھی کر سکتے ہیں، جیسے کہ کسی آرڈر کے لیے لائن آئٹم۔ مثال کے طور پر، درج ذیل Liquid آرڈر میں موجود ہر لائن آئٹم کا نام ڈسپلے کرتا ہے:
{% for li in order.lineItems %}
{{ li.title }}
{% endfor %}
Flow درج ذیل Liquid کنڈیشنل (یا کنٹرول فلو) ٹیگ کو سپورٹ کرتا ہے:
آپ فلٹر کا استعمال کر کے Liquid میں ویری ایبل ڈیٹا کو تبدیل کر سکتے ہیں۔ Flow تمام اوپن سورس Liquid فلٹر کو سپورٹ کرتا ہے۔
مثال کے طور پر، درج ذیل Liquid آرڈر کے نام سے سابقہ کو ہٹاتا ہے اور باقی بچنے والے حصے کو آؤٹ پٹ کرتا ہے: {{ order.name | remove: "Order-" }}
فلٹر میں Liquid ویری ایبل استعمال کرنے کے حوالے سے تحفظات
فلٹر کا استعمال کر کے ویری ایبل کو تبدیل کرنے سے پہلے، درج ذیل تحفظات کا جائزہ لیں:
Flow ڈاٹ نوٹیشن کو سپورٹ نہیں کرتا ہے جو کچھ فلٹر کے لیے دستیاب ہے۔ مثال کے طور پر، Flow {{ order.lineItems | size }} کو سپورٹ کرتا ہے لیکن {{ order.lineItems.size }} کو نہیں۔
Flow میٹا فیلڈ کے لیے ڈاٹ نوٹیشن کو سپورٹ نہیں کرتا ہے۔ مثال کے طور پر، آپ {{ order.metafields.custom.hold_note }} استعمال نہیں کر سکتے۔ اس کے بجائے، آپ کو مثالوں میں بتائے گئے طریقے کے مطابق میٹا فیلڈ پر لوپ چلانا ہوگا۔
Flow کسی فہرست میں آئٹم تک رسائی کے لیے انڈیکس کے استعمال کو سپورٹ نہیں کرتا ہے۔ مثال کے طور پر، آپ {{ order.lineItems[0].title }} استعمال نہیں کر سکتے۔ اس کے بجائے، آپ کو مثالوں میں بتائے گئے طریقے کے مطابق لائن آئٹم پر لوپ چلانا ہوگا۔
تاریخ کے فلٹر
معیاری Liquid فلٹر کے علاوہ، Flow شیڈول کردہ وقت ٹرگر اور ڈیٹا حاصل کریں فیچر کو سپورٹ کرنے کے لیے ایک تاریخ کے مقابلے میں دوسری تاریخ حاصل کرنے کی خاطر تاریخ کے فلٹر فراہم کرتا ہے۔ یہ فلٹر درج ذیل ہیں: date_minus اور date_plus۔ مثال کے طور پر:
مستقبل میں ایک دن بعد کی تاریخ لوٹانے کے لیے: {{ "now" | date_plus: "1 day" }}
ماضی میں ایک دن پہلے کی تاریخ لوٹانے کے لیے: {{ "now" | date_minus: "1 day" }}
یہ فلٹر دورانیے کی اکائی کے طور پر second، minute، day، week، month، اور year کو قبول کرتے ہیں، چاہے وہ واحد ہوں (جیسے second) یا جمع ہوں (جیسے seconds)۔ آپ درج ذیل قسم کی حسب ضرورت اکائی بھی فراہم کر سکتے ہیں:
سیکنڈ کی تعداد کو ظاہر کرنے والا ایک انٹیجر: {{ "now" | date_minus: 3600 }}، جہاں 3600، 1 گھنٹے کے برابر ہوتا ہے۔
ایک ISO8601 دورانیے کی سٹرنگ: {{ "now" | date_minus: "P1Y2D" }}، جہاں P1Y2D کا مطلب 1 سال اور 2 دن ہے۔
کرپٹوگرافک فلٹر
Flow ہیشنگ اور ہیش پر مبنی پیغام کی توثیق کے کوڈ (HMAC) بنانے کے لیے کرپٹوگرافک فلٹر فراہم کرتا ہے۔ یہ فلٹر منفرد شناخت کنندہ، چیک سم بنانے، یا مخصوص ہیش فارمیٹ درکار ہونے والے تھرڈ پارٹی سسٹم کے ساتھ انٹیگریٹ کرنے کے لیے مفید ہیں۔
ہیشنگ فلٹر
Shopify Flow درج ذیل قسم کے ہیشنگ فلٹر کو سپورٹ کرتا ہے:
blake3 - ایک BLAKE3 ہیش بناتا ہے (عام استعمال کے لیے تجویز کردہ)۔
عام ہیشنگ کے مقاصد اور نئے نفاذ کے لیے، آپ کو blake3 استعمال کرنا چاہیے، کیونکہ یہ پرانے الگورتھم کے مقابلے میں بہتر کارکردگی اور سیکیورٹی پیش کرتا ہے۔ تاہم، تھرڈ پارٹی سسٹم کے ساتھ مطابقت کے لیے sha256، sha1، اور md5 دستیاب ہیں۔
استعمال کی مثال:
{{ "hello world" | blake3 }} "hello world" کا BLAKE3 ہیش لوٹاتا ہے۔
HMAC فلٹر
سیکرٹ کی کے ساتھ HMAC بنانے کے لیے، درج ذیل سپورٹ کردہ فلٹر میں سے کوئی ایک استعمال کریں:
آپ ورک فلو میں شامل کسٹمر، آرڈر اور پروڈکٹ کے URL آؤٹ پٹ کرنا چاہتے ہیں۔
# 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>
ٹیگ کی فہرست کو میٹا فیلڈ میں تبدیل کریں
آپ ٹیگ کے سیٹ کو ایسے میٹا فیلڈ میں تبدیل کرنا چاہتے ہیں جو سنگل لائن ٹیکسٹ فیلڈ کی فہرست ہو۔ آپ سٹور میں پروڈکٹ شامل کی گئی ٹرگر کا استعمال کر کے ایک ورک فلو بناتے ہیں، اور پروڈکٹ کا میٹا فیلڈ اپ ڈیٹ کریں ایکشن استعمال کرتے ہیں۔ پروڈکٹ کا میٹا فیلڈ اپ ڈیٹ کریں ایکشن کے ویلیو سیکشن میں، آپ درج ذیل Liquid کوڈ شامل کرتے ہیں۔ اس مثال میں فرض کیا گیا ہے کہ آپ کو پروڈکٹ بننے پر صرف ایک بار ویلیو سیٹ کرنے کی ضرورت ہے، اور یہ کہ پروڈکٹ میں دو متعلقہ ٹیگ ہیں: color:red اور color:orange۔
سنگل لائن ٹیکسٹ فیلڈ کی فہرست سیٹ کرنے کے لیے Liquid کی مثال۔
جب کوئی کسٹمر آرڈر پر $500 سے زیادہ خرچ کرے تو آپ ملازم کو ای میل بھیجنے کے لیے ایک ورک فلو بنانا چاہتے ہیں۔ آپ آرڈر بنایا گیا ٹرگر کا استعمال کر کے ورک فلو بناتے ہیں، ایک ایسی کنڈیشن سیٹ کرتے ہیں جو آرڈر کا کل بل $500 سے زیادہ ہونے پر ٹرو (true) ہو جاتی ہے، اور اندرونی ای میل بھیجیں ایکشن استعمال کرتے ہیں۔ اندرونی ای میل بھیجیں ایکشن کے پیغام سیکشن میں، آپ درج ذیل ویری ایبل استعمال کرتے ہیں۔
کسٹمر کی تفصیلات فراہم کرنے کے لیے ویری ایبل کے استعمال کی مثال۔
ان پٹ
آؤٹ پٹ
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 }}.
براہ کرم Jeanne Dupont (jeanne@example.com) کو $763.42 کا آرڈر دینے پر شکریہ کا ذاتی نوٹ بھیجیں۔
کم سٹاک والی پروڈکٹ کے لیے ڈائنامک ای میل پیغام لکھیں
آپ فیصلہ کرتے ہیں کہ جب پروڈکٹ کی انونٹری کم ہو رہی ہو اور مزید سٹاک کے لیے آرڈر دینے کی ضرورت ہو تو آپ کو عملے کے کسی رکن کو مطلع کرنا ہوگا۔ آپ ایک ایسا ورک فلو بناتے ہیں جو انونٹری کی مقدار تبدیل ہو گئی ٹرگر سے شروع ہوتا ہے، اور ایک ایسی کنڈیشن سیٹ کرتے ہیں جو پچھلی انونٹری کی مقدار 10 سے کم یا اس کے برابر ہونے پر ٹرو (true) ہو جاتی ہے۔ اندرونی ای میل بھیجیں ایکشن کے پیغام سیکشن میں، آپ درج ذیل ویری ایبل استعمال کرتے ہیں۔
آئٹم کی تفصیلات فراہم کرنے کے لیے ویری ایبل کے استعمال کی مثال۔
ان پٹ
آؤٹ پٹ
Please reorder {{ product.title }}. Email owner@store.com to verify that they've received the purchase order.
براہ کرم High Waist Leggings - Black کا دوبارہ آرڈر کریں۔ پرچیز آرڈر موصول ہونے کی تصدیق کے لیے owner@example.com کو ای میل کریں۔
سٹاف کو فراڈ آرڈر کے بارے میں مطلع کرنے کے لیے ڈائنامک ای میل پیغام لکھیں
آپ ان آرڈر کو منسوخ کرنا چاہتے ہیں جن کا رسک لیول ہائی ہے، لیکن آپ ترجیح دیتے ہیں کہ آپ کا سٹاف آرڈر کو مینوئل طور پر منسوخ کرے۔ آپ ایک ایسا ورک فلو بناتے ہیں جو آرڈر بنایا گیا ٹرگر سے شروع ہوتا ہے، اور ایک ایسی کنڈیشن سیٹ کرتے ہیں جو آرڈر کا رسک لیول ہائی ہونے کے برابر ہونے پر ٹرو (true) ہو جاتی ہے۔ اندرونی ای میل بھیجیں ایکشن کے پیغام سیکشن میں، آپ درج ذیل ویری ایبل استعمال کرتے ہیں۔
فراڈ آرڈر کے بارے میں معلومات فراہم کرنے کے لیے ویری ایبل کے استعمال کی مثال۔
ان پٹ
آؤٹ پٹ
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 سٹور کو فراڈ کے ہائی رسک والا آرڈر موصول ہوا ہے۔ ہم اس آرڈر کو پروڈکشن میں بھیجے جانے سے پہلے، فوری طور پر منسوخ کرنا چاہیں گے:
#1001
Dupont, Jeanne
jeanne@example.com
براہ کرم آرڈر کے نئے سٹیٹس کی تصدیق کریں۔ شکریہ!
فار لوپ کا استعمال کر کے آرڈر کے لیے لائن آئٹم آؤٹ پٹ کریں
جب کوئی آرڈر موصول ہوتا ہے، تو ایک ایسا پیغام بھیجنا کارآمد ہو سکتا ہے جس میں آرڈر کی گئی پروڈکٹ شامل ہوں۔ آپ یہ کام for loop کا استعمال کر کے کر سکتے ہیں، جو بار بار کوڈ کے ایک بلاک پر عمل درآمد کرتا ہے۔ ویری ایبل کو سپورٹ کرنے والے ٹیکسٹ فیلڈ فار لوپ اور فار لوپ آبجیکٹ کو بھی سپورٹ کرتے ہیں۔
مثال کے طور پر، آپ ایسا ورک فلو بنانا چاہتے ہیں جو آرڈر میں تمام SKU اور مقدار کی فہرست لوٹاتا ہو۔ اندرونی ای میل بھیجیں ایکشن کے پیغام سیکشن میں، آپ درج ذیل ویری ایبل استعمال کرتے ہیں۔
آرڈر کی معلومات فراہم کرنے کے لیے فار لوپ کے استعمال کی مثال۔
ان پٹ
آؤٹ پٹ
Order summary:
{% for a in order.lineItems %}
{{a.sku}} ( {{a.quantity}} )
{% endfor %}
آرڈر کا خلاصہ:
8987097979 (50)
8877778887 (3)
888998898B (1)
اضافی معلومات کے ساتھ فار لوپ کا استعمال کر کے آرڈر کے لیے لائن آئٹم آؤٹ پٹ کریں
آپ ای میل میں مزید معلومات شامل کرنے کا فیصلہ کرتے ہیں، جس میں پروڈکٹ کا نام، SKU، فی آئٹم قیمت اور کسٹمر کی شپنگ کی معلومات شامل ہیں۔ اندرونی ای میل بھیجیں ایکشن کے پیغام سیکشن میں، آپ درج ذیل ویری ایبل استعمال کرتے ہیں۔
آرڈر کی مزید وسیع معلومات فراہم کرنے کے لیے فار لوپ کے استعمال کی مثال۔
ان پٹ
آؤٹ پٹ
Order summary:
{% for a in order.lineItems %}
Product: {{a.title}}
SKU: {{a.sku}}
Price (per unit): ${{a.originalUnitPriceSet.shopMoney.amount}}
Quantity: {{a.quantity}}
{% endfor %}
آرڈر کا خلاصہ:
پروڈکٹ: High Waist Leggings - Black
SKU: 8987097979
قیمت (فی یونٹ): $8.49
مقدار: 5
پروڈکٹ: Athletic Socks - Blue
SKU: 888998898B
قیمت (فی یونٹ): $5.61
مقدار: 2
فار لوپ کو if سٹیٹمنٹ کے ساتھ ملا کر کچھ لائن آئٹم آؤٹ پٹ کریں
آپ کو کسی مخصوص وینڈر کی طرف سے فراہم کردہ فروخت شدہ آئٹم کو ٹریک کرنے کی ضرورت ہے۔ اندرونی ای میل بھیجیں ایکشن کے پیغام سیکشن میں، آپ درج ذیل ویری ایبل استعمال کرتے ہیں اور اپنے for loop میں if سٹیٹمنٹ شامل کرتے ہیں۔
مخصوص وینڈر کے لیے آرڈر کی معلومات فراہم کرنے کے لیے فار لوپ اور if سٹیٹمنٹ کے استعمال کی مثال۔
ان پٹ
آؤٹ پٹ
Acme product sold:
{% for x in order.lineItems %}
{% if x.vendor == 'acme-vendor' %}
Product name: {{x.title}}
SKU: {{x.sku}}
{% endif %}
{% endfor %}
Acme کی فروخت شدہ پروڈکٹ:
پروڈکٹ کا نام: High Waist Leggings - Black
SKU: 8987097979
Shopify Flow میں پیچیدہ ڈیٹا آبجیکٹ
Flow آپ کو GraphQL Admin API میں موجود تقریباً کسی بھی ڈیٹا تک رسائی کی اجازت دیتا ہے۔ اس میں فہرستوں اور آبجیکٹ جیسے پیچیدہ ڈیٹا آبجیکٹ شامل ہیں۔ تاہم، آپ ان آبجیکٹ کے ساتھ کیا کر سکتے ہیں اس کی کچھ حدود ہیں۔ یہ سیکشن ان حدود کا خاکہ پیش کرتا ہے اور ان کے ساتھ کام کرنے کے طریقے کی مثالیں فراہم کرتا ہے۔
براہ راست فہرستوں اور آبجیکٹ کو کال کرنے کے بجائے، آپ کو فہرست پر لوپ کرنا چاہیے اور صرف وہ فیلڈ شامل کرنی چاہئیں جو آپ چاہتے ہیں۔
مثال کے طور پر، {{ order.lineItems }} کو براہ راست کال کرنے کے بجائے، مخصوص فیلڈ کو کال کرنے کے لیے درج ذیل فارمیٹ استعمال کریں۔ ان مثالوں میں وہ تمام فیلڈ شامل ہیں جو فہرست یا آبجیکٹ کو براہ راست کال کر کے شامل کی جائیں گی۔ اپنی مطلوبہ فیلڈ کاپی اور پیسٹ کریں۔
ٹیکسٹ
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}