Last active
July 10, 2024 08:22
-
-
Save TeamDijon/0bb0ae6287dd24f062d708b45ce42a40 to your computer and use it in GitHub Desktop.
Playing with object construction in Liquid
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{% 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