Liquid ভেরিয়েবল হলো Liquid-এ সংজ্ঞায়িত করা প্লেসহোল্ডার, যা ওয়ার্কফ্লো রান করার সময় GraphQL Admin API থেকে প্রাপ্ত মান দিয়ে প্রতিস্থাপিত হয়। ভেরিয়েবল আপনার ওয়ার্কফ্লোতে জড়িত গ্রাহক, অর্ডার ও পণ্যের বিভিন্ন বৈশিষ্ট্য বর্ণনা করতে পারে, যেমন- অর্ডার নম্বর, অর্ডারের মূল্য বা গ্রাহকের নাম। ওয়ার্কফ্লোতে লজিক নিয়ন্ত্রণ করতে শর্তে অথবা কোনো অ্যাকশন থেকে ডেটা আউটপুট পেতে ভেরিয়েবল ব্যবহার করা যেতে পারে।
Liquid ব্যবহার করে ওয়ার্কফ্লোতে ভেরিয়েবল যোগ করা
একটি ভেরিয়েবল যোগ করুন লিঙ্ক থাকা যেকোনো টেক্সট ফিল্ডে আপনি Liquid ব্যবহার করে ভেরিয়েবল যোগ করতে পারবেন। প্রাসঙ্গিক ফিল্ডের নিচে থাকা একটি ভেরিয়েবল যোগ করুন লিঙ্কে ক্লিক করুন এবং এরপর তালিকা থেকে একটি ভেরিয়েবল বেছে নিন।
একটি ভেরিয়েবল যোগ করুন তালিকার ভেরিয়েবলগুলোকে ফিল্টার করা হয়, যাতে আপনি শুধুমাত্র বর্তমান ধাপের আগের ধাপগুলো (যেমন ট্রিগার) থেকে পাওয়া ভেরিয়েবলগুলো ব্যবহার করতে পারেন। উদাহরণস্বরূপ, অর্ডার তৈরি হয়েছে ট্রিগারটি Admin API থেকে অর্ডার ও শপ রিসোর্সগুলো প্রদান করে, যা ভেরিয়েবল হিসেবে যোগ করা যেতে পারে। তালিকা থেকে একটি ভেরিয়েবল বেছে নেওয়ার পর, এটি সঠিকভাবে ফর্ম্যাট করা Liquid হিসেবে টেক্সট বক্সে যোগ হয়ে যায়।
আপনি সরাসরি টেক্সট ফিল্ডেও Liquid লিখতে পারেন। উদাহরণস্বরূপ, Shopify অ্যাডমিন থেকে order-123-এর মতো অর্ডারের স্ট্রিং প্রদর্শন করতে আপনি {{ order.name }} ভেরিয়েবল ব্যবহার করতে পারেন।
Flow যেহেতু Liquid-এর জন্য ব্যবহৃত ডেটা পুনরুদ্ধারে Admin API ব্যবহার করে, তাই ভেরিয়েবল সিনট্যাক্স ক্যামেল কেস ব্যবহার করে। ক্যামেল কেস ভেরিয়েবলে প্রথম শব্দটি ছোট হাতের অক্ষর দিয়ে শুরু হয় এবং পরবর্তী শব্দগুলো বড় হাতের অক্ষরে শুরু হয়, যেমন 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 %}
আপনি অবজেক্টের তালিকায় (যেমন কোনো অর্ডারের লাইন আইটেমগুলোতে) ইটারেট করতে একটি ফর লুপ ব্যবহার করতে পারেন। উদাহরণস্বরূপ, নিচের Liquid কোডটি একটি অর্ডারের প্রতিটি লাইন আইটেমের নাম প্রদর্শন করে:
{% for li in order.lineItems %}
{{ li.title }}
{% endfor %}
Flow নিচের শর্তসাপেক্ষ (বা কন্ট্রোল ফ্লো) Liquid ট্যাগগুলো সমর্থন করে:
আপনি ফিল্টার ব্যবহার করে Liquid-এ ভেরিয়েবল ডেটা রূপান্তর করতে পারেন। Flow সব ওপেন সোর্স Liquid ফিল্টার সমর্থন করে।
উদাহরণস্বরূপ, নিচের Liquid কোডটি একটি অর্ডারের নাম থেকে প্রিফিক্স সরিয়ে দেয় এবং বাকি অংশ আউটপুট হিসেবে প্রদান করে: {{ order.name | remove: "Order-" }}
ফিল্টারে Liquid ভেরিয়েবল ব্যবহারের ক্ষেত্রে বিবেচ্য বিষয়সমূহ
ফিল্টার ব্যবহার করে ভেরিয়েবল রূপান্তর করার আগে, নিচের বিবেচ্য বিষয়গুলো দেখে নিন:
কিছু ফিল্টারে উপলভ্য ডট (dot) নোটেশন 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 দিন।
ক্রিপ্টোগ্রাফিক ফিল্টার
হ্যাশিং এবং হ্যাশ-ভিত্তিক মেসেজ অথেনটিকেশন কোড (HMAC) তৈরি করার জন্য Flow ক্রিপ্টোগ্রাফিক ফিল্টার প্রদান করে। ইউনিক শনাক্তকারী, চেকসাম তৈরি বা নির্দিষ্ট হ্যাশ ফর্ম্যাটের প্রয়োজন হয় এমন তৃতীয়-পক্ষের সিস্টেমের সাথে ইন্টিগ্রেট করার ক্ষেত্রে এই ফিল্টারগুলো খুবই কার্যকর।
হ্যাশিং ফিল্টার
Shopify Flow নিচের ধরনের হ্যাশিং ফিল্টারগুলো সমর্থন করে:
blake3 - একটি BLAKE3 হ্যাশ তৈরি করে (সাধারণ ব্যবহারের জন্য সাজেস্ট করা হয়)।
সাধারণ হ্যাশিংয়ের উদ্দেশ্যে এবং নতুন ইমপ্লিমেন্টেশনের ক্ষেত্রে আপনার blake3 ব্যবহার করা উচিত, কারণ এটি পুরোনো অ্যালগরিদমগুলোর তুলনায় উন্নত পারফরম্যান্স এবং নিরাপত্তা প্রদান করে। তবে, তৃতীয়-পক্ষের সিস্টেমের সাথে সামঞ্জস্য বজায় রাখার জন্য sha256, sha1 এবং md5 উপলভ্য আছে।
আপনি একটি ওয়ার্কফ্লোতে জড়িত থাকা গ্রাহক, অর্ডার এবং পণ্যের জন্য 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>
ট্যাগের তালিকাকে মেটাফিল্ডে কনভার্ট করা
আপনি এক সেট ট্যাগকে এমন একটি মেটাফিল্ডে কনভার্ট করতে চান যা হলো এক-লাইনের টেক্সট ফিল্ডের তালিকা। আপনি Product added to store ট্রিগার ব্যবহার করে একটি ওয়ার্কফ্লো তৈরি করেন এবং Update product metafield অ্যাকশনটি ব্যবহার করেন। Update product metafield অ্যাকশনের Value বিভাগে, আপনি নিচের Liquid কোডটি যোগ করেন। এই উদাহরণটিতে ধরে নেওয়া হয়েছে যে পণ্যটি তৈরি করার সময় আপনাকে শুধুমাত্র একবার মানগুলো সেট করতে হবে এবং পণ্যটির দুটি প্রাসঙ্গিক ট্যাগ আছে: color:red এবং color:orange।
এক-লাইনের টেক্সট ফিল্ডের তালিকা সেট করার Liquid-এর উদাহরণ।
কোনো গ্রাহক একটি অর্ডারে $500-এর বেশি খরচ করলে কর্মচারীকে ইমেইল পাঠাতে আপনি একটি ওয়ার্কফ্লো তৈরি করতে চান। আপনি Order created ট্রিগার ব্যবহার করে একটি ওয়ার্কফ্লো তৈরি করেন, একটি শর্ত সেট করেন যা অর্ডারের মোট পরিমাণ $500-এর বেশি হলে তা সত্যি হয় এবং Send internal email অ্যাকশনটি ব্যবহার করেন। Send internal email অ্যাকশনের Message বিভাগে, আপনি নিচের ভেরিয়েবলগুলো ব্যবহার করেন।
গ্রাহকের বিবরণ প্রদান করতে ভেরিয়েবল ব্যবহারের উদাহরণ।
ইনপুট
আউটপুট
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 }}.
$763.42-এর একটি অর্ডার দেওয়ার জন্য অনুগ্রহ করে Jeanne Dupont-কে (jeanne@example.com) একটি ব্যক্তিগত ধন্যবাদ নোট পাঠান।
স্টক কম থাকা পণ্যের জন্য ডায়নামিক ইমেইল মেসেজ লেখা
আপনি সিদ্ধান্ত নিয়েছেন যে পণ্যের ইনভেন্টরি কমে গেলে এবং আরও স্টকের জন্য একটি অর্ডার দেওয়ার প্রয়োজন হলে একজন স্টাফ সদস্যকে আপনার জানানো প্রয়োজন। আপনি এমন একটি ওয়ার্কফ্লো তৈরি করেন যা Inventory quantity changed ট্রিগার দিয়ে শুরু হয় এবং একটি শর্ত সেট করেন যা আগের ইনভেন্টরির পরিমাণ 10-এর কম বা সমান হলে তা সত্যি হয়। Send internal email অ্যাকশনের Message বিভাগে, আপনি নিচের ভেরিয়েবলগুলো ব্যবহার করেন।
আইটেমের বিবরণ প্রদান করতে ভেরিয়েবল ব্যবহারের উদাহরণ।
ইনপুট
আউটপুট
Please reorder {{ product.title }}. Email owner@store.com to verify that they've received the purchase order.
অনুগ্রহ করে High Waist Leggings - Black রিঅর্ডার করুন। তারা পারচেজ অর্ডার পেয়েছেন কিনা তা যাচাই করতে owner@example.com-এ ইমেইল করুন।
প্রতারণামূলক অর্ডার সম্পর্কে স্টাফকে জানাতে ডায়নামিক ইমেইল মেসেজ লেখা
উচ্চ ঝুঁকির মাত্রা থাকা অর্ডারগুলো আপনি বাতিল করতে চান, তবে আপনার স্টাফ যেন ম্যানুয়ালি অর্ডারটি বাতিল করে তা আপনি অগ্রাধিকার দেন। আপনি এমন একটি ওয়ার্কফ্লো তৈরি করেন যা Order created ট্রিগার দিয়ে শুরু হয় এবং একটি শর্ত সেট করেন যা অর্ডারের ঝুঁকির মাত্রা বেশি হলে তা সত্যি হয়। Send internal email অ্যাকশনের Message বিভাগে, আপনি নিচের ভেরিয়েবলগুলো ব্যবহার করেন।
একটি প্রতারণামূলক অর্ডারের তথ্য প্রদান করতে ভেরিয়েবল ব্যবহারের উদাহরণ।
ইনপুট
আউটপুট
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 লুপ ব্যবহার করে একটি অর্ডারের লাইন আইটেম আউটপুট করা
যখন কোনো অর্ডার পাওয়া যায়, তখন অর্ডার করা পণ্যগুলো আছে এমন একটি মেসেজ পাঠানো কার্যকরী হতে পারে। কোডের একটি ব্লক বারবার এক্সিকিউট করে এমন for loop ব্যবহার করার মাধ্যমে আপনি এটি করতে পারেন। ভেরিয়েবল সমর্থন করে এমন টেক্সট ফিল্ডগুলো for লুপ এবং forloop অবজেক্ট-ও সমর্থন করে।
উদাহরণস্বরূপ, আপনি এমন একটি ওয়ার্কফ্লো তৈরি করতে চান যা একটি অর্ডারে থাকা সকল SKU এবং পরিমাণের তালিকা প্রদান করে। Send internal email অ্যাকশনের Message বিভাগে, আপনি নিচের ভেরিয়েবলগুলো ব্যবহার করেন।
অর্ডারের তথ্য প্রদান করতে for লুপ ব্যবহারের উদাহরণ।
ইনপুট
আউটপুট
Order summary:
{% for a in order.lineItems %}
{{a.sku}} ( {{a.quantity}} )
{% endfor %}
অতিরিক্ত তথ্যসহ for লুপ ব্যবহার করে একটি অর্ডারের লাইন আইটেম আউটপুট করা
আপনি পণ্যের নাম, SKU, আইটেম প্রতি মূল্য এবং গ্রাহকের শিপিংয়ের তথ্যসহ ইমেইলে আরও তথ্য যোগ করার সিদ্ধান্ত নিয়েছেন। Send internal email অ্যাকশনের Message বিভাগে, আপনি নিচের ভেরিয়েবলগুলো ব্যবহার করেন।
আরও বিস্তারিত অর্ডারের তথ্য প্রদান করার জন্য for লুপ ব্যবহারের উদাহরণ।
ইনপুট
আউটপুট
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
একটি for লুপ এবং একটি if স্টেটমেন্ট একত্রিত করে কিছু লাইন আইটেম আউটপুট করুন
একটি নির্দিষ্ট ভেন্ডরের সরবরাহ করা বিক্রিত আইটেমগুলি আপনার ট্র্যাক করা প্রয়োজন। Send internal email অ্যাকশনের Message বিভাগে আপনি নিচের ভেরিয়েবলগুলি ব্যবহার করবেন এবং আপনার for loop-এর ভেতর একটি if স্টেটমেন্ট অন্তর্ভুক্ত করবেন।
নির্দিষ্ট ভেন্ডরদের জন্য অর্ডারের তথ্য প্রদান করতে for লুপ এবং 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-এ কমপ্লেক্স ডেটা অবজেক্ট
GraphQL Admin API-তে থাকা প্রায় যেকোনো ডেটা অ্যাক্সেস করার সুবিধা Flow আপনাকে দেয়। এর মধ্যে তালিকা ও অবজেক্টের মতো কমপ্লেক্স ডেটা অবজেক্ট অন্তর্ভুক্ত আছে। তবে, এই অবজেক্টগুলোর সাহায্যে আপনি যা যা করতে পারবেন, তার কিছু সীমাবদ্ধতা আছে। এই বিভাগে সেই সীমাবদ্ধতাগুলো তুলে ধরা হয়েছে এবং এগুলো নিয়ে কীভাবে কাজ করতে হবে, তার উদাহরণ দেওয়া হয়েছে।
সরাসরি তালিকা এবং অবজেক্ট কল করার পরিবর্তে, আপনার উচিত তালিকার ওপর লুপ করা এবং শুধুমাত্র আপনার প্রয়োজনীয় ফিল্ডগুলো অন্তর্ভুক্ত করা।
উদাহরণস্বরূপ, সরাসরি {{ order.lineItems }} কল করার পরিবর্তে নির্দিষ্ট ফিল্ড কল করতে নিচের ফর্ম্যাটটি ব্যবহার করুন। এই উদাহরণগুলোতে এমন সব ফিল্ড অন্তর্ভুক্ত আছে, যা সরাসরি তালিকা বা অবজেক্ট কল করার মাধ্যমে অন্তর্ভুক্ত করা হতো। আপনার প্রয়োজনীয় ফিল্ডগুলো কপি এবং পেস্ট করুন।
টেক্সট
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}