Змінні Liquid — це заповнювачі, визначені в Liquid, які під час запуску робочого процесу замінюються значеннями з GraphQL Admin API. Змінні можуть описувати атрибути клієнтів, замовлень і товарів, що беруть участь у ваших робочих процесах, як-от номер замовлення, ціну замовлення або ім’я клієнта. Змінні можна використовувати в умовах для керування логікою робочого процесу або для виведення даних з дії.
Додавання змінних до робочих процесів за допомогою Liquid
Ви можете додавати змінні за допомогою Liquid до будь-якого текстового поля, що містить посилання Додати змінну. Натисніть посилання Додати змінну під відповідним полем, а потім виберіть змінну зі списку.
Змінні в списку Додати змінну відфільтровано, тому ви використовуєте лише ті з них, які повертаються кроками, що передують поточному (наприклад, тригерами). Наприклад, тригер Створено замовлення надає ресурси замовлення та магазину через Admin API, які можна вставити як змінні. Після вибору змінної зі списку вона додається до текстового поля як правильно відформатований код Liquid.
Код Liquid також можна вводити безпосередньо в текстове поле. Наприклад, ви можете використати змінну {{ order.name }}, щоб відобразити рядок замовлення з панелі адміністрування Shopify, наприклад order-123.
Оскільки для отримання даних для Liquid Flow використовує Admin API, синтаксис змінних використовує формат camel case. У таких змінних перше слово починається з малої літери, а наступні — з великої, наприклад firstName або canMarkAsPaid. Наприклад, щоб отримати доступ до дати створення товару, введіть {{ product.createdAt }}. Якщо ви використовуєте синтаксис Liquid у темі Shopify (де формат camel case не застосовується), потрібно ввести {{ product.created_at }}.
Умовні теги та теги ітерації Liquid
Теги Liquid можна використовувати зі змінними для виконання таких функцій:
Записати умовні оператори (наприклад, щоб визначити, чи перевищує загальна сума замовлення 100 доларів США).
Здійснювати ітерацію в списку об’єктів (наприклад, виводити дані для кожної позиції в замовленні).
Ви можете використовувати теги Liquid, щоб записувати ці оператори та здійснювати ітерацію за об’єктами.
Наприклад, цей код Liquid відображає номер замовлення, якщо загальна сума замовлення перевищує 100 доларів США:
{% if order.totalPriceSet.shopMoney.amount > 100 %}
Order number: {{ order.name }}
{% endif %}
Ви також можете використовувати цикл for для ітерації в списку об’єктів, як-от у списку позицій для замовлення. Наприклад, цей код 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 годині).
У Flow передбачено криптографічні фільтри для гешування і створення кодів автентифікації повідомлень на основі гешування (HMAC). Ці фільтри стануть у пригоді під час створення унікальних ідентифікаторів, контрольних сум або для інтеграції зі сторонніми системами, що вимагають конкретних форматів гешу.
Фільтри гешування
Shopify Flow підтримує такі типи фільтрів гешування:
blake3 — створює геш BLAKE3 (рекомендовано для загального використання).
Для загальних цілей хешування та нових впроваджень слід використовувати blake3, оскільки цей алгоритм забезпечує вищу продуктивність і рівень безпеки порівняно зі старішими алгоритмами. Однак для сумісності зі сторонніми системами доступні алгоритми sha256, sha1 та md5.
Приклад використання:
{{ "hello world" | blake3 }} повертає хеш BLAKE3 для «hello world».
Фільтри 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 доларів США, і застосовуєте дію Надіслати внутрішній електронний лист. У розділі Повідомлення дії Надіслати внутрішній електронний лист ви використовуєте наведені нижче змінні.
Приклад використання змінних для надання відомостей про клієнта.
Вхідні дані
Вихідні дані
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. У розділі Повідомлення дії Надіслати внутрішній електронний лист ви використовуєте наведені нижче змінні.
Приклад використання змінних для надання відомостей про одиницю товару.
Вхідні дані
Вихідні дані
Please reorder {{ product.title }}. Email owner@store.com to verify that they've received the purchase order.
Повторно замовте High Waist Leggings - Black. Надішліть електронний лист на адресу owner@example.com, щоб переконатися, що вони отримали замовлення на купівлю.
Написання динамічного електронного листа, щоб сповістити персонал про шахрайське замовлення
Ви хочете скасовувати замовлення з високим рівнем ризику, але віддаєте перевагу тому, щоб ваш персонал скасовував їх вручну. Ви створюєте робочий процес, що починається з тригера Створено замовлення, і встановлюєте умову, яка виконується, якщо рівень ризику замовлення є високим. У розділі Повідомлення дії Надіслати внутрішній електронний лист ви використовуєте наведені нижче змінні.
Приклад використання змінних для надання інформації про шахрайське замовлення.
Вхідні дані
Вихідні дані
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.
Наприклад, вам потрібно створити робочий процес, який повертає список усіх артикулів і кількостей у замовленні. У розділі Повідомлення дії Надіслати внутрішній електронний лист ви використовуєте наведені нижче змінні.
Приклад використання циклу for для надання інформації про замовлення.
Вхідні дані
Вихідні дані
Order summary:
{% for a in order.lineItems %}
{{a.sku}} ( {{a.quantity}} )
{% endfor %}
Виведення позицій замовлення за допомогою циклу for із додатковими відомостями
Ви вирішуєте додати в електронний лист більше інформації, зокрема назву товару, артикули, ціну за одиницю та інформацію про доставку клієнта. У розділі Повідомлення дії Надіслати внутрішній електронний лист ви використовуєте наведені нижче змінні.
Приклад використання циклу 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
Артикул: 8987097979
Ціна (за одиницю): 8,49 долара США
Кількість: 5
Товар: Athletic Socks - Blue
Артикул: 888998898B
Ціна (за одиницю): 5,61 долара США
Кількість: 2
Виведення деяких позицій шляхом поєднання циклу for з оператором if
Вам потрібно відстежувати продані одиниці, які постачає певний підрядник. У розділі Повідомлення дії Надіслати внутрішній електронний лист ви використовуєте наведені нижче змінні та додаєте оператор if у цикл for.
Приклад використання циклу 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
Артикул: 8987097979
Складні об’єкти даних у Shopify Flow
Flow дає змогу отримувати доступ майже до будь-яких даних, які містяться в GraphQL Admin API. Сюди входять складні об’єкти даних, як-от списки та об’єкти. Однак існують певні обмеження щодо того, що можна робити з цими об’єктами. У цьому розділі описано ці обмеження та наведено приклади роботи з ними.
Замість безпосереднього виклику списків і об’єктів слід перебирати список у циклі та включати лише потрібні поля.
Наприклад, замість безпосереднього виклику {{ order.lineItems }} скористайтеся наведеним нижче форматом для виклику певних полів. Ці приклади містять усі поля, які було б включено в разі безпосереднього виклику списку чи об’єкта. Скопіюйте та вставте потрібні поля.
Текст
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}