Shopify Flow의 Liquid 변수
변수는 워크플로가 실행될 때 값으로 대체되는 플레이스 홀더입니다. 이러한 변수는 워크플로와 관련된 고객, 주문 및 제품의 속성을 설명합니다. 예를 들어 주문 번호, 주문 가격, 고객 이름 등에 대한 변수가 있습니다. 변수는 조건 에서 워크플로의 논리를 제어하거나 작업 의 데이터를 출력하기 위해 사용할 수 있습니다.
Liquid 정보 Liquid는 작업의 변수에 액세스하고 Flow에서 코드를 작성하는 데 사용되는 템플릿 언어입니다. Flow는 오픈 소스 라이브러리 를 가장 가깝게 따르는 Liquid의 변형을 사용합니다. Shopify 테마는 Liquid의 다른 변형 을 사용하지만 Liquid 변형은 테마 전용으로 Flow가 지원하는 것보다 더 많은 필터와 태그뿐만 아니라 변수 에 액세스하기 위한 다른 구문도 포함되어 있습니다.
Liquid 변수 변수 추가 링크가 포함된 텍스트 필드에 Liquid 변수를 추가할 수 있습니다. 관련 필드 아래에 있는 변수 추가 링크를 클릭한 다음 목록에서 변수를 선택합니다.
변수 추가 목록의 변수는 필터링되어 현재 단계(예: 트리거) 이전의 단계별 변수 반환만 볼 수 있습니다. 예를 들어 주문 생성됨 트리거는 주문 및 상점 리소스를 제공하여 GraphQL Admin API 에서 액세스할 수 있는 주문 또는 상점 설정과 관련된 모든 변수를 사용할 수 있습니다. 목록에서 변수를 선택하면 형식이 올바르게 지정되고 텍스트 상자에 추가됩니다.
텍스트 블록에 Liquid를 직접 작성할 수도 있습니다. 예를 들어 {{ order.name }}
변수를 사용하여 order-123과 같은 주문 문자열을 Shopify 관리자에 표시할 수 있습니다.
Flow는 GraphQL Admin API를 사용하여 Liquid에서 사용하는 데이터를 검색하므로 변수 구문은 "카멜 표기법"을 사용합니다. 예를 들어 제품이 생성된 날짜에 액세스하려면 {{ product.createdAt }}
을 입력합니다. Shopify 테마에서 Liquid 구문을 사용하는 경우 {{ 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 조건부(또는 제어 흐름) 태그를 지원합니다.
Flow는 또한 다음 Liquid 반복 태그를 지원합니다.
필터 필터를 사용하면 Liquid에서 데이터를 변환할 수 있습니다. Flow는 모든 오픈 소스 Liquid 필터를 지원합니다.
예를 들어 다음 Liquid는 주문 이름에서 접두사를 제거하고 남은 것을 출력합니다: {{ order.name | remove: "Order-" }}
Flow는 표준 Liquid 필터 외에도 다른 날짜를 기준으로 날짜를 가져오는 날짜 필터를 제공하여 예약된 시간 트리거 및 데이터 가져오기 기능을 지원합니다. 해당 필터는: 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 }}
ISO8601 기간 문자열을 제공할 수도 있습니다. 여기서 P1Y2D
는 1년 2일을 의미합니다:{{ "now" | date_minus: "P1Y2D" }}
필터에 Liquid 변수 사용 시 고려 사항
Flow는 일부 필터에 사용할 수 있는 점 표기법을 지원하지 않습니다. 예를 들어 Flow는 {{ order.lineItems | size }}
를 지원하지만 {{ order.lineItems.size }}
는 지원하지 않습니다.
Flow는 메타 필드에 대한 점 표기법을 지원하지 않습니다. 예를 들어 {{ order.metafields.custom.hold_note }}
를 사용할 수 없습니다. 대신 예에 설명된 대로 메타 필드를 반복해야 합니다.
Flow는 색인을 사용하여 목록에서 항목에 액세스하는 기능을 지원하지 않습니다. 예를 들어, {{ order.lineItems[0].title }}
은(는) 사용할 수 없습니다. 대신 예제에 설명된 것과 같이 품목을 반복해야 합니다.
예 다음 예제를 참고하면 Liquid 변수의 사용 방법을 이해하는 데 도움이 됩니다.
리소스에 대한 URL 출력 워크플로와 관련된 고객, 주문 및 제품에 대한 URL을 출력하려고 합니다.
참고 사항
URL의 정확한 구문은 트리거에 따라 달라집니다. 예를 들어 주문 트리거는 다음과 같은 제품 ID에 액세스하는 것을 허용하지 않습니다: {{ product.legacyResourceId }}.
# 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 코드를 추가합니다. 이 예에서는 제품이 생성될 때 한 번만 값을 설정한다고 가정하였으며, 제품의 관련 태그는 2개(color:red
및 color:orange
)라고 가정하였습니다.
한 줄 텍스트 필드의 목록을 설정하는 Liquid 예시. 입력 출력
{% capture mf_value %} {%- for tags_item in product.tags -%} {%- if tags_item contains "color:" -%} "{{- tags_item | remove_first: "color:" | strip -}}", {%- endif -%} {%- endfor -%} {% endcapture -%} [{{mf_value | remove_last: ","}}]
["빨간색","주황색"]
주문의 동적 이메일 메시지 작성 고객이 한 주문에 $500 이상 지출 할 때 직원에게 이메일을 보내는 워크플로를 생성하려고 합니다. 주문 생성됨 트리거를 사용하여 워크플로를 생성하고, 주문 총액이 $500 이상이면 참이 되는 조건을 설정하고, 내부 이메일 보내기 작업을 사용합니다. 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
변수 사용 예시에서는 고객 세부 정보를 제공합니다. 입력 출력 $ {{ order.totalPriceSet.shopMoney.amount }} 주문에 대한 감사 인사를 직접 {{ order.customer.firstName }} {{ order.customer.lastName }}({{ order.customer.email }})에게 보내주십시오. $763.42 주문에 대한 감사 인사를 직접 Jeanne Dupont(jeanne@example.com)에게 보내주십시오.
재고가 적은 제품에 대한 동적 이메일 메시지 작성 제품 재고가 줄어들어 재고를 보충하기 위해 주문해야 하는 경우 직원에게 알리기로 결정했습니다. 그러면 재고 수량 변경 완료 트리거로 시작하는 워크플로를 생성하고 이전 재고 수량이 10 이하가 되면 참이 되도록 조건을 설정합니다. 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
변수 사용 예시에서는 품목 세부 정보를 제공합니다. 입력 출력 {{ product.title }} 제품을 재주문하십시오. owner@store.com으로 이메일을 보내 구매 주문을 받았는지 확인해야 합니다. 하이웨이스트 레깅스(검은색) 제품을 재주문하십시오. owner@example.com으로 이메일을 보내 구매 주문을 받았는지 확인해야 합니다.
직원에게 사기 주문에 대해 알릴 수 있는 동적 이메일 메시지 작성 위험 수준이 높은 주문을 취소하려고 하지만 직원이 주문을 수동으로 취소하는 것을 선호합니다. 그러면 주문 생성됨 트리거로 시작하는 워크플로를 생성하고 주문의 위험 수준이 높음인 경우 조건을 참으로 설정합니다. 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
변수 사용 예시에서는 사기 주문에 대한 정보를 제공합니다. 입력 출력 Shopify 스토어에서 사기 위험이 높은 주문을 받았습니다. 주문 생성으로 보내기 전에 이 주문을 바로 취소하고 싶습니다. {{ order.name }} {{ order.billingAddress.lastName }}, {{ order.billingAddress.firstName }} {{ order.email }} 새 주문 상태를 확인하십시오. 감사합니다! Shopify 스토어에서 사기 위험이 높은 주문을 받았습니다. 주문 생성으로 보내기 전에 이 주문을 바로 취소하고 싶습니다. #1001 Dupont, Jeanne jeanne@example.com 새 주문 상태를 확인하십시오. 감사합니다!
For 루프를 사용한 주문 품목 출력 주문을 받은 후 주문된 제품이 포함된 메시지를 보내는 것이 유용할 수 있습니다. 코드 블록을 반복적으로 실행하는 for loop
를 사용하여 이를 수행할 수 있습니다. 변수를 지원하는 텍스트 필드는 for 루프 및 forloop 객체 도 지원합니다.
예를 들어, 주문의 모든 SKU(재고 관리 코드) 및 수량 목록을 반환하는 워크플로를 생성하려고 합니다. 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
for 루프 사용의 예에서는 주문 정보를 제공합니다. 입력 출력 주문 요약: {% for a in order.lineItems %} SKU(재고 관리 코드): {{a.sku}}({{a.quantity}}), {% endfor %} 주문 요약: 8987097979(50) 8877778887(3) 888998898B(1)
추가 정보가 포함된 For 루프를 사용하여 주문 품목 출력 제품 이름, SKU(재고 관리 코드), 품목당 가격 및 고객의 배송 정보를 포함하여 이메일에 더 많은 정보를 추가하기로 결정했습니다 내부 이메일 보내기 작업의 메시지 섹션에서는 다음과 같은 변수가 사용됩니다.
for 루프 사용의 예에서는 한층 광범위한 주문 정보를 제공합니다. 입력 출력 주문 요약: {% for a in order.lineItems %} 제품: {{a.title}} SKU(재고 관리 코드): {{a.sku}} 가격(단위당): ${{a.originalUnitPriceSet.shopMoney.amount}} 수량: {{a.quantity}} {% endfor %} 주문 요약: 제품: 하이웨이스트 레깅스(검은색) SKU(재고 관리 코드): 8987097979 가격(단위당): $8.49 수량: 5 제품: 운동용 양말(파란색) SKU(재고 관리 코드): 888998898B 가격(단위당): $5.61 수량: 2
For 루프와 If 문을 결합하 여 일부 품목 출력 특정 공급업체에서 제공한 품목의 판매를 추적해야 합니다. 내부 이메일 보내기 작업의 메시지 섹션에서 다음과 같은 변수를 사용하고 for loop
에 if
문을 포함합니다.
for 루프 및 if 문 사용의 예에서는 특정 공급업체에 대한 주문 정보를 제공합니다. 입력 출력 판매된 Acme 제품: {% for x in order.lineItems %} {% if x.vendor == 'acme-vendor' %} 제품 이름: {{x.title}} SKU(재고 관리 코드): {{x.sku}} {% endif %} {% endfor %} 판매된 Acme 제품: 제품 이름: 하이웨이스트 레깅스(검은색) SKU(재고 관리 코드): 8987097979
Shopify Flow의 복잡한 데이터 개체 Flow를 사용하면 GraphQL 관리자 API 에 포함된 거의 모든 데이터에 액세스할 수 있습니다. 여기에는 목록, 개체와 같은 복잡한 데이터 개체가 포함됩니다. 하지만 이러한 개체의 사용에는 몇 가지 제한이 있습니다. 이 섹션에서는 이러한 제한 사항을 간략하게 설명하고 이 제한 사항을 활용하는 방법의 예시를 제공합니다.
주의
리스트나 객체를 직접 호출하여(예: {{ order.lineItems }}
입력) Liquid에서 리스트/배열이나 객체를 출력할 수 없습니다. GraphQL이 과도한 양의 데이터를 반환하여 워크플로가 실패할 수 있으므로 이 제한이 설정됩니다. 또한 새 필드가 도입되면 일부 워크플로가 중단될 수 있습니다.
리스트 및 객체를 직접 호출하는 대신 리스트를 반복하여 원하는 필드만 포함해야 합니다.
예를 들어 {{ order.lineItems }}
를 직접 호출하는 대신 다음 형식을 사용하여 특정 필드를 호출합니다. 다음 예에는 리스트나 객체를 직접 호출하여 포함할 수 있는 모든 필드가 포함됩니다. 필요한 필드를 복사하여 붙여넣으십시오.
Text
{% for li in order . lineItems %}
{% comment %} li.contract - omitted {% endcomment %}
{% for ca in li . customAttributes %}
{{ ca . key }}
{{ ca . value }}
{% endfor %}
{% for da in li . discountAllocations %}
{{ da . allocatedAmountSet . presentmentMoney . amount }}
{{ da . allocatedAmountSet . presentmentMoney . currencyCode }}
{{ da . allocatedAmountSet . shopMoney . amount }}
{{ da . allocatedAmountSet . shopMoney . currencyCode }}
{% endfor %}
{{ li . discountedTotalSet . presentmentMoney . amount }}
{{ li . discountedTotalSet . presentmentMoney . currencyCode }}
{{ li . discountedTotalSet . shopMoney . amount }}
{{ li . discountedTotalSet . shopMoney . currencyCode }}
{{ li . discountedUnitPriceSet . presentmentMoney . amount }}
{{ li . discountedUnitPriceSet . presentmentMoney . currencyCode }}
{{ li . discountedUnitPriceSet . shopMoney . amount }}
{{ li . discountedUnitPriceSet . shopMoney . currencyCode }}
{% comment %} li.duties - omitted {% endcomment %}
{{ li . fulfillableQuantity }}
{{ li . fulfillmentService . callbackUrl }}
{{ li . fulfillmentService . fulfillmentOrdersOptIn }}
{{ li . fulfillmentService . handle }}
{{ li . fulfillmentService . id }}
{{ li . fulfillmentService . inventoryManagement }}
{% comment %} rest of location omitted {% endcomment %}
{{ li . fulfillmentService . location . name }}
{{ li . fulfillmentService . productBased }}
{{ li . fulfillmentService . serviceName }}
{% for sm in li . fulfillmentService . shippingMethods %}
{{ sm . code }}
{{ sm . label }}
{% endfor %}
{{ li . fulfillmentService . type }}
{{ li . fulfillmentStatus }}
{{ li . id }}
{{ li . image . altText }}
{{ li . image . height }}
{{ li . image . id }}
{% comment %} li.image.metafield omitted {% endcomment %}
{% comment %} li.image.privateMetafield omitted {% endcomment %}
{{ li . image . width }}
{{ li . merchantEditable }}
{{ li . name }}
{{ li . nonFulfillableQuantity }}
{{ li . originalTotalSet . presentmentMoney . amount }}
{{ li . originalTotalSet . presentmentMoney . currencyCode }}
{{ li . originalTotalSet . shopMoney . amount }}
{{ li . originalTotalSet . shopMoney . currencyCode }}
{{ li . originalUnitPriceSet . presentmentMoney . amount }}
{{ li . originalUnitPriceSet . presentmentMoney . currencyCode }}
{{ li . originalUnitPriceSet . shopMoney . amount }}
{{ li . originalUnitPriceSet . shopMoney . currencyCode }}
{% comment %} rest of product omitted {% endcomment %}
{{ li . product . title }}
{{ li . quantity }}
{{ li . refundableQuantity }}
{{ li . requiresShipping }}
{{ li . restockable }}
{{ li . sellingPlan . name }}
{{ li . sku }}
{% for tl in li . taxLines %}
{{ tl . priceSet . presentmentMoney . amount | json }}
{{ tl . priceSet . presentmentMoney . currencyCode | json }}
{{ tl . priceSet . shopMoney . amount | json }}
{{ tl . priceSet . shopMoney . currencyCode | json }}
{{ tl . rate | json }}
{{ tl . ratePercentage | json }}
{{ tl . title | json }}
{% endfor %}
{{ li . taxable }}
{{ li . title }}
{{ li . totalDiscountSet . presentmentMoney . amount }}
{{ li . totalDiscountSet . presentmentMoney . currencyCode }}
{{ li . totalDiscountSet . shopMoney . amount }}
{{ li . totalDiscountSet . shopMoney . currencyCode }}
{{ li . unfulfilledDiscountedTotalSet . presentmentMoney . amount }}
{{ li . unfulfilledDiscountedTotalSet . presentmentMoney . currencyCode }}
{{ li . unfulfilledDiscountedTotalSet . shopMoney . amount }}
{{ li . unfulfilledDiscountedTotalSet . shopMoney . currencyCode }}
{{ li . unfulfilledOriginalTotalSet . presentmentMoney . amount }}
{{ li . unfulfilledOriginalTotalSet . presentmentMoney . currencyCode }}
{{ li . unfulfilledOriginalTotalSet . shopMoney . amount }}
{{ li . unfulfilledOriginalTotalSet . shopMoney . currencyCode }}
{{ li . unfulfilledQuantity }}
{% comment %} rest of variant omitted {% endcomment %}
{{ li . variant . title }}
{{ li . variantTitle }}
{{ li . vendor }}
{% endfor %}
json
{
"lineItems": [
{% for li in order . lineItems %}
{% if forloop.first != true %} ,{% endif %}
{
"contract": {
{% comment %} rest of contract omitted {% endcomment %}
"id": {{ li . contract . id | json }}
},
"customAttributes": [
{% for ca in li . customAttributes %}
{% if forloop.first != true %} ,{% endif %}
{
"key":{{ ca . key | json }} ,
"value":{{ ca . value | json }}
}
{% endfor %}
],
"discountAllocations": [
{% for da in li . discountAllocations %}
{% if forloop.first != true %} ,{% endif %}
"allocatedAmountSet": {
"presentmentMoney" : {
"amount": {{ da . allocatedAmountSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ da . allocatedAmountSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ da . allocatedAmountSet . shopMoney . amount | json }} ,
"currencyCode": {{ da . allocatedAmountSet . shopMoney . currencyCode | json }}
}
}
{% endfor %}
],
"discountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li . discountedTotalSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . discountedTotalSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . discountedTotalSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . discountedTotalSet . shopMoney . currencyCode | json }}
}
},
"discountedUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li . discountedUnitPriceSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . discountedUnitPriceSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . discountedUnitPriceSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . discountedUnitPriceSet . shopMoney . currencyCode | json }}
}
},
"duties": [
{% for duty li . duties %}
{% if forloop.first != true %} ,{% endif %}
{
{% comment %} rest of duties omitted {% endcomment %}
"id": {{ duty . id | json }}
}
{% endfor %}
],
"fulfillableQuantity": {{ li . fulfillableQuantity | json }} ,
"fulfillmentService": {
"callbackUrl":{{ li . fulfillmentService . callbackUrl | json }} ,
"fulfillmentOrdersOptIn": {{ li . fulfillmentService . fulfillmentOrdersOptIn | json }} ,
"handle": {{ li . fulfillmentService . handle | json }} ,
"id": {{ li . fulfillmentService . id | json }} ,
"inventoryManagement": {{ li . fulfillmentService . inventoryManagement | json }} ,
{% comment %} fulfillmentService.inventoryManagement - omitted {% endcomment %}
"productBased": {{ li . fulfillmentService . productBased | json }} ,
"serviceName": {{ li . fulfillmentService . serviceName | json }} ,
"shippingMethods": [
{% for sm in li . fulfillmentService . shippingMethods %}
{% if forloop.first != true %} ,{% endif %}
{
"code": {{ sm . code | json }} ,
"label": {{ sm . label | json }}
}
{% endfor %}
],
"type": {{ li . fulfillmentService . type | json }}
},
"fulfillmentStatus": {{ li . fulfillmentStatus | json }} ,
"id": {{ li . id | json }} ,
"image": {
"altText": {{ li . image . altText | json }} ,
"height": {{ li . image . height | json }} ,
"id": {{ li . image . id | json }} ,
{% comment %} li.image.metafield omitted {% endcomment %}
{% comment %} li.image.privateMetafield omitted {% endcomment %}
"width":{{ li . image . width | json }}
},
"merchantEditable": {{ li . merchantEditable | json }} ,
"name": {{ li . name | json }} ,
"nonFulfillableQuantity": {{ li . nonFulfillableQuantity | json }} ,
"originalTotalSet": {
"presentmentMoney" : {
"amount": {{ li . originalTotalSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . originalTotalSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . originalTotalSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . originalTotalSet . shopMoney . currencyCode | json }}
}
},
"originalUnitPriceSet": {
"presentmentMoney" : {
"amount": {{ li . originalUnitPriceSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . originalUnitPriceSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . originalUnitPriceSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . originalUnitPriceSet . shopMoney . currencyCode | json }}
}
},
"product": {
{% comment %} rest of Product omitted {% endcomment %}
"title": {{ li . product . title | json }}
},
"quantity": {{ li . quantity | json }} ,
"refundableQuantity": {{ li . refundableQuantity | json }} ,
"requiresShipping": {{ li . requiresShipping | json }} ,
"restockable": {{ li . restockable | json }} ,
"sellingPlan": {
"name": {{ li . sellingPlan . name | json }}
},
"sku": {{ li . sku | json }} ,
"taxLines": [
{% for tl in li . taxLines %}
{% if forloop.first != true %} ,{% endif %}
{
"priceSet": {
"presentmentMoney" : {
"amount": {{ tl . priceSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ tl . priceSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ tl . priceSet . shopMoney . amount | json }} ,
"currencyCode": {{ tl . priceSet . shopMoney . currencyCode | json }}
}
},
"rate": {{ tl . rate | json }} ,
"ratePercentage": {{ tl . ratePercentage | json }} ,
"title": {{ tl . title | json }}
}
{% endfor %}
],
"taxable":{{ li . taxable | json }} ,
"title":{{ li . title | json }} ,
"totalDiscountSet": {
"presentmentMoney" : {
"amount": {{ li . totalDiscountSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . totalDiscountSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . totalDiscountSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . totalDiscountSet . shopMoney . currencyCode | json }}
}
},
"unfulfilledDiscountedTotalSet": {
"presentmentMoney" : {
"amount": {{ li . unfulfilledDiscountedTotalSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . unfulfilledDiscountedTotalSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . unfulfilledDiscountedTotalSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . unfulfilledDiscountedTotalSet . shopMoney . currencyCode | json }}
}
},
"unfulfilledOriginalTotalSet": {
"presentmentMoney" : {
"amount": {{ li . unfulfilledOriginalTotalSet . presentmentMoney . amount | json }} ,
"currencyCode": {{ li . unfulfilledOriginalTotalSet . presentmentMoney . currencyCode | json }}
},
"shopMoney": {
"amount": {{ li . unfulfilledOriginalTotalSet . shopMoney . amount | json }} ,
"currencyCode": {{ li . unfulfilledOriginalTotalSet . shopMoney . currencyCode | json }}
}
},
"unfulfilledQuantity": {{ li . unfulfilledQuantity | json }} ,
"variant": {
{% comment %} rest of variant omitted {% endcomment %}
"title": {{ li . variant . title | json }}
},
"variantTitle": {{ li . variantTitle | json }} ,
"vendor": {{ li . vendor | json }}
}
{% endfor %}
]
}