Biến Liquid là các phần giữ chỗ được định nghĩa trong Liquid, sẽ được thay thế bằng giá trị từ GraphQL Admin API khi dòng công việc chạy. Biến có thể mô tả thuộc tính của khách hàng, đơn hàng và sản phẩm liên quan trong dòng công việc, chẳng hạn như mã đơn hàng, giá đơn hàng hoặc tên khách hàng. Có thể dùng biến trong điều kiện để kiểm soát logic của dòng công việc, hoặc dùng để xuất dữ liệu từ một hành động.
Bạn có thể thêm biến bằng Liquid vào bất kỳ trường văn bản nào có liên kết Thêm biến. Nhấp vào liên kết Thêm biến bên dưới trường tương ứng, rồi chọn biến từ danh sách.
Các biến trong danh sách Thêm biến được lọc để bạn chỉ sử dụng biến được trả về từ những bước trước đó, chẳng hạn như yếu tố kích hoạt. Ví dụ: yếu tố kích hoạt Đã tạo đơn hàng cung cấp tài nguyên đơn hàng và cửa hàng từ Admin API, có thể chèn dưới dạng biến. Sau khi bạn chọn biến từ danh sách, biến đó sẽ được thêm vào hộp văn bản theo đúng định dạng Liquid.
Bạn cũng có thể viết trực tiếp mã Liquid vào trường văn bản. Ví dụ: bạn có thể dùng biến {{ order.name }} để hiển thị chuỗi đơn hàng từ bảng điều khiển quản trị Shopify, chẳng hạn như order-123.
Vì Flow sử dụng Admin API để truy xuất dữ liệu cho Liquid, cú pháp biến sẽ sử dụng camel case (kiểu chữ lạc đà). Biến camel case có từ đầu tiên viết thường và các từ tiếp theo viết hoa chữ cái đầu, chẳng hạn như firstName hoặc canMarkAsPaid. Ví dụ: để truy xuất ngày tạo sản phẩm, hãy nhập {{ product.createdAt }}. Nếu bạn dùng cú pháp Liquid trong chủ đề Shopify (không dùng camel case), bạn sẽ nhập {{ product.created_at }}.
Thẻ Liquid điều kiện và vòng lặp
Có thể sử dụng thẻ Liquid với biến để thực hiện các chức năng sau:
Viết câu lệnh điều kiện, chẳng hạn như xác định xem tổng giá trị đơn hàng có lớn hơn 100 $ hay không.
Lặp qua danh sách đối tượng, chẳng hạn như xuất dữ liệu cho từng mục hàng trong đơn hàng.
Bạn có thể dùng thẻ Liquid để viết các câu lệnh này và lặp qua các đối tượng.
Ví dụ: mã Liquid sau đây sẽ hiển thị mã đơn hàng nếu tổng giá trị đơn hàng lớn hơn 100 $:
{% if order.totalPriceSet.shopMoney.amount > 100 %}
Order number: {{ order.name }}
{% endif %}
Bạn cũng có thể dùng vòng lặp for để lặp qua danh sách đối tượng, chẳng hạn như các mục hàng của đơn hàng. Ví dụ: mã Liquid sau đây sẽ hiển thị tên của từng mục hàng trong đơn hàng:
{% for li in order.lineItems %}
{{ li.title }}
{% endfor %}
Flow hỗ trợ các thẻ Liquid điều kiện (hoặc luồng kiểm soát) sau:
Bạn có thể chuyển đổi dữ liệu biến trong Liquid bằng bộ lọc. Flow hỗ trợ tất cả bộ lọc Liquid nguồn mở.
Ví dụ: mã Liquid sau đây sẽ xóa tiền tố khỏi tên đơn hàng và xuất phần còn lại: {{ order.name | remove: "Order-" }}
Những điểm cần lưu ý khi dùng biến Liquid trong bộ lọc
Trước khi chuyển đổi biến bằng bộ lọc, hãy xem xét những điểm cần lưu ý sau:
Flow không hỗ trợ ký hiệu dấu chấm dành cho một số bộ lọc. Ví dụ: Flow hỗ trợ {{ order.lineItems | size }} chứ không hỗ trợ {{ order.lineItems.size }}.
Flow không hỗ trợ ký hiệu dấu chấm cho trường siêu dữ liệu. Ví dụ: không thể sử dụng {{ order.metafields.custom.hold_note }}. Thay vào đó, bạn phải lặp qua các trường siêu dữ liệu như được nêu trong các ví dụ.
Flow không hỗ trợ sử dụng chỉ mục (index) để truy cập vào mục trong danh sách. Ví dụ: không thể sử dụng {{ order.lineItems[0].title }}. Thay vào đó, bạn phải lặp qua các mục hàng như được nêu trong các ví dụ.
Bộ lọc ngày
Ngoài các bộ lọc Liquid tiêu chuẩn, Flow còn cung cấp các bộ lọc ngày để lấy ngày tương đối so với một ngày khác nhằm hỗ trợ yếu tố kích hoạt Scheduled time (Thời gian đã lên lịch) và tính năng Get data (Lấy dữ liệu). Các bộ lọc này bao gồm: date_minus và date_plus. Ví dụ:
Để trả về ngày cách hiện tại 1 ngày trong tương lai: {{ "now" | date_plus: "1 day" }}
Để trả về ngày cách hiện tại 1 ngày trong quá khứ: {{ "now" | date_minus: "1 day" }}
Các bộ lọc này chấp nhận second, minute, day, week, month và year làm đơn vị thời lượng, cho cả số ít (chẳng hạn như second) và số nhiều (chẳng hạn như seconds). Bạn cũng có thể cung cấp các loại đơn vị có thể tùy chỉnh sau:
Một số nguyên biểu thị số giây: {{ "now" | date_minus: 3600 }}, trong đó 3600 tương đương với 1 giờ.
Chuỗi thời lượng ISO8601: {{ "now" | date_minus: "P1Y2D" }}, trong đó P1Y2D có nghĩa là 1 năm và 2 ngày.
Bộ lọc mã hóa
Flow cung cấp các bộ lọc mã hóa để băm và tạo Mã xác thực tin nhắn dựa trên hàm băm (HMAC). Các bộ lọc này hữu ích cho việc tạo mã nhận dạng duy nhất, tổng kiểm tra (checksum) hoặc tích hợp với các hệ thống của bên thứ ba yêu cầu định dạng băm cụ thể.
Bộ lọc băm
Shopify Flow hỗ trợ các loại bộ lọc băm sau:
blake3 - Tạo hàm băm BLAKE3 (được khuyên dùng cho mục đích chung).
Đối với mục đích băm chung và các triển khai mới, bạn nên sử dụng blake3, vì bộ lọc này mang lại hiệu suất và khả năng bảo mật vượt trội so với các thuật toán cũ hơn. Tuy nhiên, sha256, sha1 và md5 luôn có sẵn để tương thích với các hệ thống của bên thứ ba.
Ví dụ cách sử dụng:
{{ "hello world" | blake3 }} trả về hàm băm BLAKE3 của "hello world".
Bộ lọc HMAC
Để tạo HMAC có khóa bí mật, hãy dùng một trong các bộ lọc được hỗ trợ sau đây:
Bạn muốn hiển thị URL cho khách hàng, đơn hàng và sản phẩm liên quan đến dòng công việc.
# 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>
Chuyển đổi danh sách thẻ thành trường siêu dữ liệu
Bạn muốn chuyển đổi bộ thẻ thành trường siêu dữ liệu là danh sách các trường văn bản một dòng. Bạn tạo dòng công việc bằng cách dùng yếu tố kích hoạt Product added to store (Sản phẩm được thêm vào cửa hàng) và hành động Update product metafield (Cập nhật trường siêu dữ liệu sản phẩm). Trong mục Value (Giá trị) của hành động Update product metafield (Cập nhật trường siêu dữ liệu sản phẩm), hãy thêm đoạn mã liquid sau đây. Ví dụ này giả định rằng bạn chỉ cần thiết lập giá trị một lần khi tạo sản phẩm và sản phẩm có hai thẻ liên quan: color:red và color:orange.
Ví dụ liquid để thiết lập danh sách của một trường văn bản một dòng.
Bạn muốn tạo dòng công việc để gửi email cho nhân viên khi khách hàng chi hơn 500 USD cho một đơn hàng. Bạn tạo dòng công việc bằng yếu tố kích hoạt Order created (Đơn hàng đã được tạo), đặt điều kiện là "đúng" nếu tổng giá trị đơn hàng lớn hơn 500 USD và dùng hành động Send internal email (Gửi email nội bộ). Trong mục Message (Tin nhắn) của hành động Send internal email (Gửi email nội bộ), hãy sử dụng các biến sau đây.
Ví dụ về cách sử dụng biến để cung cấp thông tin chi tiết của khách hàng.
Đầu vào
Đầu ra
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 }}.
Vui lòng gửi thư cảm ơn riêng đến Jeanne Dupont (jeanne@example.com) vì đã đặt đơn hàng trị giá 763,42 USD.
Viết tin nhắn email động cho sản phẩm sắp hết hàng
Bạn quyết định cần thông báo cho nhân viên khi hàng tồn kho của sản phẩm sắp hết và cần đặt thêm hàng. Bạn tạo dòng công việc bắt đầu bằng yếu tố kích hoạt Số lượng hàng tồn kho đã thay đổi và đặt điều kiện là đúng nếu số lượng hàng tồn kho trước đó nhỏ hơn hoặc bằng 10. Trong mục Tin nhắn của thao tác Gửi email nội bộ, bạn sử dụng các biến sau.
Ví dụ về cách sử dụng biến để cung cấp chi tiết mặt hàng.
Đầu vào
Đầu ra
Please reorder {{ product.title }}. Email owner@store.com to verify that they've received the purchase order.
Vui lòng đặt hàng lại Quần legging cạp cao - Màu đen. Gửi email đến owner@example.com để xác minh rằng họ đã nhận được đơn đặt hàng.
Viết tin nhắn email động để thông báo cho nhân viên về đơn hàng gian lận
Bạn muốn hủy các đơn hàng có mức độ rủi ro cao nhưng muốn nhân viên hủy đơn hàng theo cách thủ công. Bạn tạo dòng công việc bắt đầu bằng yếu tố kích hoạt Đơn hàng đã tạo và đặt điều kiện là đúng nếu mức độ rủi ro của đơn hàng là cao. Trong mục Tin nhắn của thao tác Gửi email nội bộ, bạn sử dụng các biến sau.
Ví dụ về cách sử dụng biến để cung cấp thông tin về đơn hàng gian lận.
Đầu vào
Đầu ra
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!
Cửa hàng Shopify của chúng ta đã nhận một đơn hàng có rủi ro gian lận cao. Chúng ta cần hủy đơn hàng này ngay lập tức trước khi chuyển sang khâu sản xuất:
#1001
Dupont, Jeanne
jeanne@example.com
Vui lòng xác nhận trạng thái đơn hàng mới. Xin cảm ơn!
Xuất các mục hàng của đơn hàng bằng vòng lặp for
Khi nhận được đơn hàng, việc gửi tin nhắn chứa các sản phẩm đã đặt có thể rất hữu ích. Bạn có thể thực hiện việc này bằng cách sử dụng for loop (vòng lặp for), giúp thực thi lặp lại một khối mã. Các trường văn bản hỗ trợ biến cũng hỗ trợ vòng lặp for và đối tượng forloop.
Ví dụ: bạn muốn tạo dòng công việc trả về danh sách tất cả Mã SKU và số lượng trong một đơn hàng. Trong mục Tin nhắn của thao tác Gửi email nội bộ, bạn sử dụng các biến sau.
Ví dụ về cách sử dụng vòng lặp for để cung cấp thông tin đơn hàng.
Đầu vào
Đầu ra
Order summary:
{% for a in order.lineItems %}
{{a.sku}} ( {{a.quantity}} )
{% endfor %}
Tóm tắt đơn hàng:
8987097979 (50)
8877778887 (3)
888998898B (1)
Xuất các mục hàng của đơn hàng bằng vòng lặp for có thông tin bổ sung
Bạn quyết định thêm thông tin vào email, bao gồm tên sản phẩm, Mã SKU, giá mỗi mặt hàng và thông tin vận chuyển của khách hàng. Trong mục Tin nhắn của thao tác Gửi email nội bộ, bạn sử dụng các biến sau.
Ví dụ về cách sử dụng vòng lặp for để cung cấp thông tin đơn hàng chi tiết hơn.
Đầu vào
Đầu ra
Order summary:
{% for a in order.lineItems %}
Product: {{a.title}}
SKU: {{a.sku}}
Price (per unit): ${{a.originalUnitPriceSet.shopMoney.amount}}
Quantity: {{a.quantity}}
{% endfor %}
Tóm tắt đơn hàng:
Sản phẩm: Quần legging cạp cao - Màu đen
Mã SKU: 8987097979
Giá (mỗi đơn vị): 8,49 USD
Số lượng: 5
Sản phẩm: Tất thể thao - Màu xanh dương
Mã SKU: 888998898B
Giá (mỗi đơn vị): 5,61 USD
Số lượng: 2
Xuất một số mục hàng bằng cách kết hợp vòng lặp for với câu lệnh if
Bạn cần theo dõi các mặt hàng đã bán do một nhà cung cấp cụ thể cung cấp. Trong mục Tin nhắn của thao tác Gửi email nội bộ, bạn sử dụng các biến sau và đưa câu lệnh if vào for loop.
Ví dụ về cách sử dụng vòng lặp for và câu lệnh if để cung cấp thông tin đơn hàng đối với các nhà cung cấp cụ thể.
Đầu vào
Đầu ra
Acme product sold:
{% for x in order.lineItems %}
{% if x.vendor == 'acme-vendor' %}
Product name: {{x.title}}
SKU: {{x.sku}}
{% endif %}
{% endfor %}
Sản phẩm Acme đã bán:
Tên sản phẩm: Quần legging cạp cao - Màu đen
Mã SKU: 8987097979
Đối tượng dữ liệu phức hợp trong Shopify Flow
Flow cho phép bạn truy cập gần như mọi dữ liệu trong GraphQL Admin API. Dữ liệu này bao gồm các đối tượng dữ liệu phức hợp, chẳng hạn như danh sách và đối tượng. Tuy nhiên, có một số giới hạn về những gì bạn có thể làm với các đối tượng này. Phần này trình bày các giới hạn và cung cấp ví dụ về cách thao tác với các đối tượng đó.
Thay vì gọi trực tiếp danh sách và đối tượng, bạn nên lặp qua danh sách và chỉ đưa vào các trường mong muốn.
Ví dụ: thay vì gọi trực tiếp {{ order.lineItems }}, hãy sử dụng định dạng sau để gọi các trường cụ thể. Những ví dụ này bao gồm tất cả các trường sẽ được đưa vào bằng cách gọi trực tiếp danh sách hoặc đối tượng. Sao chép và dán các trường bạn cần.
Văn bản
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}