Liquid-variabler er plassholdere definert i Liquid, som erstattes med verdier fra GraphQL Admin API når en arbeidsflyt kjører. Variabler kan beskrive egenskapene til kundene, bestillingene og produktene som er involvert i arbeidsflytene, for eksempel ordrenummer, bestillingspris eller kundenavn. Variabler kan brukes i betingelser for å kontrollere logikken i arbeidsflyten, eller for å sende ut data fra en handling.
Legge til variabler i arbeidsflyter ved hjelp av Liquid
Du kan legge til variabler med Liquid i alle tekstfelt som inneholder Legg til en variabel-koblingen. Klikk på Legg til en variabel-koblingen under det relevante feltet, og velg deretter en variabel fra listen.
Variablene i listen Legg til en variabel filtreres, slik at du bare bruker variablene som returneres av trinn før det gjeldende trinnet, som for eksempel utløsere. For eksempel gir Bestilling opprettet-utløseren bestillings- og butikkressurser fra Admin API som kan settes inn som variabler. Når du har valgt en variabel fra listen, legges den til i tekstboksen som korrekt formatert Liquid.
Du kan også skrive Liquid direkte i tekstfeltet. Du kan for eksempel bruke variabelen {{ order.name }} for å vise ordrenavnet fra Shopify-administrator, som for eksempel order-123.
Siden Flow bruker Admin API til å hente dataene som brukes til Liquid, bruker variabelsyntaksen camel case. I camel case-variabler starter det første ordet med en liten bokstav, og de påfølgende ordene starter med en stor bokstav, som for eksempel firstName eller canMarkAsPaid. For å få tilgang til datoen et produkt ble opprettet, skriver du for eksempel inn {{ product.createdAt }}. Hvis du bruker Liquid-syntaksen i et Shopify-tema, som ikke bruker camel case, skriver du inn {{ product.created_at }}.
Betingede Liquid-tagger og iterasjonstagger
Liquid-tagger kan brukes med variabler til å utføre følgende funksjoner:
Skrive betingede setninger, som for eksempel å avgjøre om en ordresum er større enn 100 USD.
Iterere gjennom en liste over objekter, som for eksempel å sende ut data for hver post i en bestilling.
Du kan bruke Liquid-tagger til å skrive disse setningene og iterere gjennom objekter.
Følgende Liquid viser for eksempel ordrenummeret hvis ordresummen er større enn 100 USD:
{% if order.totalPriceSet.shopMoney.amount > 100 %}
Order number: {{ order.name }}
{% endif %}
Du kan også bruke en for-løkke til å iterere gjennom en liste over objekter, som poster for en bestilling. Følgende Liquid viser for eksempel navnet på hver post i en bestilling:
{% for li in order.lineItems %}
{{ li.title }}
{% endfor %}
Flow støtter følgende betingede (eller kontrollflyt) Liquid-tagger:
Du kan transformere variabeldata i Liquid ved hjelp av filtre. Flow støtter alle Liquid-filtrene med åpen kildekode.
Følgende Liquid fjerner for eksempel et prefiks fra et ordrenavn og sender ut det som er igjen: {{ order.name | remove: "Order-" }}
Hensyn ved bruk av Liquid-variabler i filtre
Før du transformerer variabler ved hjelp av filtre, bør du se gjennom følgende hensyn:
Flow støtter ikke punktnotasjon som er tilgjengelig for enkelte filtre. Flow støtter for eksempel {{ order.lineItems | size }}, men ikke {{ order.lineItems.size }}.
Flow støtter ikke punktnotasjon for metafelt. Du kan for eksempel ikke bruke {{ order.metafields.custom.hold_note }}. I stedet må du løkke gjennom metafelt som beskrevet i eksemplene.
Flow støtter ikke bruk av indekser for å få tilgang til elementer i en liste. Du kan for eksempel ikke bruke {{ order.lineItems[0].title }}. I stedet må du løkke gjennom postene som beskrevet i eksemplene.
Datofiltre
I tillegg til standard Liquid-filtrene har Flow datofiltre for å hente en dato i forhold til en annen dato, for å støtte Planlagt tidspunkt-utløseren og Hent data-funksjonene. Disse filtrene er: date_minus og date_plus. For eksempel:
Slik returnerer du en dato én dag frem i tid: {{ "now" | date_plus: "1 day" }}
Slik returnerer du en dato én dag tilbake i tid: {{ "now" | date_minus: "1 day" }}
Disse filtrene godtar second, minute, day, week, month og year som varighetsenhet, både i entall (som second) og i flertall (som seconds). Du kan også angi følgende typer tilpassbare enheter:
Et heltall som representerer antall sekunder: {{ "now" | date_minus: 3600 }}, der 3600 tilsvarer 1 time.
En ISO 8601-varighetsstreng: {{ "now" | date_minus: "P1Y2D" }}, der P1Y2D betyr 1 år og 2 dager.
Kryptografiske filtre
Flow tilbyr kryptografiske filtre for hashing og for å opprette hash-baserte meldingsautentiseringskoder (HMAC-er). Disse filtrene er nyttige for å opprette unike identifikatorer, kontrollsummer eller for å integrere med tredjepartssystemer som krever spesifikke hash-formater.
Hashing-filtre
Shopify Flow støtter følgende typer hashing-filtre:
blake3 – oppretter en BLAKE3-hash (anbefales for generell bruk).
For generelle hashing-formål og nye implementeringer bør du bruke blake3, ettersom den gir overlegen ytelse og sikkerhet sammenlignet med eldre algoritmer. sha256, sha1 og md5 er imidlertid tilgjengelige for kompatibilitet med tredjepartssystemer.
Eksempel på bruk:
{{ "hello world" | blake3 }} returnerer BLAKE3-hashen til «hello world».
HMAC-filtre
For å opprette en HMAC med en hemmelig nøkkel, kan du bruke ett av følgende støttede filtre:
Du vil skrive ut URL-adressene for kunden, bestillingen og produktet som er involvert i en arbeidsflyt.
# 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>
Konverter en liste med tagger til et metafelt
Du vil konvertere et sett med tagger til et metafelt som er en liste med enlinjes tekstfelt. Du oppretter en arbeidsflyt med utløseren Produkt lagt til i butikk, og bruker handlingen Oppdater produktmetafelt. I Verdi-seksjonen av handlingen Oppdater produktmetafelt legger du til følgende Liquid-kode. Dette eksempelet antar at du bare trenger å angi verdiene én gang når produktet opprettes, og at produktet har to relevante tagger: color:red og color:orange.
Eksempel på Liquid for å angi listen over et enlinjes tekstfelt.
Du vil opprette en arbeidsflyt for å sende en e-post til en ansatt når en kunde bruker mer enn 500 USD på en bestilling. Du oppretter en arbeidsflyt med utløseren Bestilling opprettet, angir en betingelse som er sann hvis totalsummen for bestillingen er over 500 USD, og bruker handlingen Send intern e-post. I Melding-delen av handlingen Send intern e-post bruker du følgende variabler.
Eksempel på variabelbruk for å oppgi kundeinformasjon.
Inndata
Utdata
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 }}.
Send en personlig takkemelding til Jeanne Dupont (jeanne@example.com) for å ha lagt inn en bestilling på 763,42 USD.
Skriv en dynamisk e-postmelding for et produkt med lavt lagerantall
Du bestemmer deg for at du må informere en ansatt når lagerbeholdningen til et produkt er lav og det må legges inn en bestilling på flere varer. Du oppretter en arbeidsflyt som starter med utløseren Lagerantall endret, og angir en betingelse som er sann hvis det forrige lagerantallet er mindre enn eller lik 10. I Melding-seksjonen av handlingen Send intern e-post bruker du følgende variabler.
Eksempel på variabelbruk for å oppgi vareinformasjon.
Inndata
Utdata
Please reorder {{ product.title }}. Email owner@store.com to verify that they've received the purchase order.
Bestill High Waist Leggings – Black på nytt. Send e-post til owner@example.com for å bekrefte at de har mottatt innkjøpsordren.
Skriv en dynamisk e-postmelding for å varsle personalet om en falsk bestilling
Du vil kansellere bestillinger med høyt risikonivå, men foretrekker at personalet kansellerer bestillingen manuelt. Du oppretter en arbeidsflyt som starter med utløseren Bestilling opprettet, og angir en betingelse som er sann hvis risikonivået for bestillingen er lik høy. I Melding-seksjonen av handlingen Send intern e-post bruker du følgende variabler.
Eksempel på variabelbruk for å oppgi informasjon om en falsk bestilling.
Inndata
Utdata
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-butikken vår har mottatt en bestilling med høy risiko for svindel. Vi vil gjerne kansellere denne bestillingen med én gang, før den sendes til produksjon:
#1001
Dupont, Jeanne
jeanne@example.com
Bekreft den nye statusen for ordren. Takk!
Skriv ut postene for en bestilling ved hjelp av en for-løkke
Når en bestilling mottas, kan det være nyttig å sende en melding som inneholder produktene som er bestilt. Du kan gjøre dette ved å bruke en for-løkke, som utfører en kodeblokk gjentatte ganger. Tekstfelter som støtter variabler, støtter også for-løkker og forloop-objektet.
Du vil for eksempel opprette en arbeidsflyt som returnerer en liste over alle SKU-er og antall i en bestilling. I seksjonen Melding i handlingen Send intern e-post, bruker du følgende variabler.
Eksempel på bruk av for-løkke for å angi bestillingsinformasjon.
Inndata
Utdata
Order summary:
{% for a in order.lineItems %}
{{a.sku}} ( {{a.quantity}} )
{% endfor %}
Angi postene for en bestilling ved hjelp av en for-løkke med tilleggsinformasjon
Du bestemmer deg for å legge til mer informasjon i e-posten, inkludert produktnavn, SKU-er, pris per vare og kundens fraktinformasjon. I seksjonen Melding i handlingen Send intern e-post bruker du følgende variabler.
Eksempel på bruk av for-løkke for å angi mer omfattende bestillingsinformasjon.
Inndata
Utdata
Order summary:
{% for a in order.lineItems %}
Product: {{a.title}}
SKU: {{a.sku}}
Price (per unit): ${{a.originalUnitPriceSet.shopMoney.amount}}
Quantity: {{a.quantity}}
{% endfor %}
Bestillingssammendrag:
Produkt: High Waist Leggings – Black
SKU: 8987097979
Pris (per enhet): $ 8,49
Antall: 5
Produkt: Athletic Socks – Blue
SKU: 888998898B
Pris (per enhet): $ 5,61
Antall: 2
Angi noen poster ved å kombinere en for-løkke med en if-setning
Du må spore varer som selges, som leveres av en bestemt selger. I seksjonen Melding i handlingen Send intern e-post bruker du følgende variabler og inkluderer en if-setning i for-løkken.
Eksempel på bruk av for-løkke og if-setning for å angi bestillingsinformasjon for bestemte selgere.
Inndata
Utdata
Acme product sold:
{% for x in order.lineItems %}
{% if x.vendor == 'acme-vendor' %}
Product name: {{x.title}}
SKU: {{x.sku}}
{% endif %}
{% endfor %}
Acme-produkt solgt:
Produktnavn: High Waist Leggings – Black
SKU: 8987097979
Komplekse dataobjekter i Shopify Flow
Flow gir deg tilgang til nesten alle data som finnes i GraphQL Admin API. Dette inkluderer komplekse dataobjekter, som lister og objekter. Det er imidlertid noen begrensninger for hva du kan gjøre med disse objektene. Denne delen beskriver disse begrensningene og gir eksempler på hvordan du kan jobbe med dem.
I stedet for å kalle lister og objekter direkte, bør du iterere over listen og bare inkludere feltene du vil ha.
I stedet for å kalle {{ order.lineItems }} direkte, kan du for eksempel bruke følgende format til å kalle bestemte felt. Disse eksemplene inkluderer alle feltene som ville blitt inkludert ved å kalle listen eller objektet direkte. Kopier og lim inn feltene du trenger.
Tekst
{% for li in order.lineItems %}
{% comment %}li.contract - omitted{% endcomment %}