Skip to content

Instantly share code, notes, and snippets.

@TeamDijon
Last active July 10, 2024 08:22
Show Gist options
  • Save TeamDijon/0bb0ae6287dd24f062d708b45ce42a40 to your computer and use it in GitHub Desktop.
Save TeamDijon/0bb0ae6287dd24f062d708b45ce42a40 to your computer and use it in GitHub Desktop.
Playing with object construction in Liquid
{% comment %}
- I have a product with a variant metafield containing associated cross-sell product list
- Objective is to show cross-sell products associated with the variant
- Second objective was to use object construction to remove complexity in markup
- Inside the markup, we need the product reference for data population as well as the variant IDs which needs to show the cross sell card (used by Javascript)
{% endcomment %}
{% liquid
# First, we make a duplicate-free list of cross-sell products
assign cross_sell_product_list = ''
for variant in product.variants
assign cross_sell_list = variant.metafields.cross_sell.product_list.value
unless cross_sell_list
continue
endunless
if cross_sell_product_list == blank
assign cross_sell_product_list = cross_sell_list | uniq
else
assign cross_sell_product_list = cross_sell_list | uniq | concat: cross_sell_product_list
endif
endfor
assign cross_sell_product_list = cross_sell_product_list | uniq | reverse
# Second, we prepare the data (product + associated variant IDs)
assign cross_sell_data_list = ''
for cross_sell_product in cross_sell_product_list
assign cross_sell_data = null
assign variant_id_list = ''
for variant in product.variants
assign cross_sell_list = variant.metafields.cross_sell.product_list.value | uniq
unless cross_sell_list
continue
endunless
if cross_sell_list contains cross_sell_product
if variant_id_list == blank
assign variant_id_list = variant.id | uniq
else
assign variant_id_list = variant.id | uniq | concat: variant_id_list
endif
endif
endfor
assign cross_sell_data = null | default: product: cross_sell_product, variant_id_list: variant_id_list
if cross_sell_data_list == blank
assign cross_sell_data_list = cross_sell_data | uniq
else
assign cross_sell_data_list = cross_sell_data | uniq | concat: cross_sell_data_list
endif
endfor
# Third, we output the data (one simple loop inside markup)
echo cross_sell_data_list | append: '<br><br>'
for cross_sell_data in cross_sell_data_list
echo cross_sell_data.product.title | append: ' - ' | append: cross_sell_data.variant_id_list | append: '<br>'
endfor
%}
{% # Here is the ouput %}
{% comment %}
[{"product"=>ProductDrop, "variant_id_list"=>[48838125256992, 48838125224224, 48838122242336]}, {"product"=>ProductDrop, "variant_id_list"=>[48838125256992, 48838125224224, 48838122242336]}, {"product"=>ProductDrop, "variant_id_list"=>[48838125256992]}, {"product"=>ProductDrop, "variant_id_list"=>[48838125224224, 48838122242336]}, {"product"=>ProductDrop, "variant_id_list"=>[48838125224224]}, {"product"=>ProductDrop, "variant_id_list"=>[48838125224224]}, {"product"=>ProductDrop, "variant_id_list"=>[48838125224224]}]
A - [48838125256992, 48838125224224, 48838122242336]
autumn flower - [48838125256992, 48838125224224, 48838122242336]
bitter forest - [48838125256992]
autumn leaf - [48838125224224, 48838122242336]
chaussure 1 - [48838125224224]
chaussure 2 - [48838125224224]
chaussure 3 - [48838125224224]
{% endcomment %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment