commit 802d7319e8fb61ca6d6b6ad5a4d3147cc3bb9eb8 Author: Axel Date: Thu Jul 2 01:35:47 2026 +0800 initial commit diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..968e3b8 Binary files /dev/null and b/.DS_Store differ diff --git a/custom_css.css b/custom_css.css new file mode 100644 index 0000000..2a840ef --- /dev/null +++ b/custom_css.css @@ -0,0 +1 @@ +.yagi-price-container{display: flex; gap: 0.5em; align-items: center;} .yagi-price-container .price__sale { display: flex; flex-direction: row-reverse !important; justify-content: flex-end; gap: 0.5em; align-items: center;} .yagi-discounted-price { color: rgb(253,36,36) !important; font-size: calc(var(--font-heading-scale) * 2.2rem); } .yagi-original-price { font-size: calc(var(--font-heading-scale) * 2.2rem); opacity: 0.8; } .yagi-sale-badge { margin-bottom: 0 !important;} \ No newline at end of file diff --git a/snippets/price.liquid b/snippets/price.liquid new file mode 100644 index 0000000..a495a61 --- /dev/null +++ b/snippets/price.liquid @@ -0,0 +1,253 @@ +{% comment %} + Renders a list of product's price (regular, sale) + + Accepts: + - product: {Object} Product Liquid object (optional) + - is_product_card {Boolean} Only needed when uncommenting the 'from' price code below to display the cheapest available variant(optional) + - use_variant: {Boolean} Renders selected or first variant price instead of overall product pricing (optional) + - price_class: {String} Adds a price class to the price element (optional) + - show_compare_at_price: {Boolean} Renders the compare at price if the product matches the condition (optional) + - sale_color: {Object} Theme color setting. Optional. + + Usage: + {% render 'price', product: product %} +{% endcomment %} +{%- liquid + if use_variant + assign target = product.selected_or_first_available_variant + else + assign target = product + endif + + assign show_price = true + if product.template_suffix contains 'enquire' and settings.card_show_enquiry_prices == false + assign show_price = false + elsif target.price == 0 and settings.card_show_zero_prices == false + assign show_price = false + endif +-%} + +{% if show_price %} + {%- liquid + assign compare_at_price = target.compare_at_price + assign price = target.price | default: 1999 + assign price_min = product.price_min + assign price_max = product.price_max + assign available = target.available | default: false + + comment + start Yagi app code + endcomment + if use_variant + assign price = target.metafields.app--168074346497.auto_discounted_price.value | default: target.price + + if target.metafields.app--168074346497.discount_type.value != nil and target.metafields.app--168074346497.discount_type.value != "fixed" and product.metafields.app--168074346497.discount_percentage.value > 0.01 + assign deducted_percentage = 1.0 | minus: product.metafields.app--168074346497.discount_percentage.value + + if target.metafields.app--168074346497.discount_percentage.value > 0.01 + assign deducted_percentage = 1.0 | minus: target.metafields.app--168074346497.discount_percentage.value + endif + + assign price = target.price | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil + assign price_min = price + assign price_max = product.price_max | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil + + assign compare_at_price = target.price + + if target.compare_at_price > compare_at_price + assign compare_at_price = target.compare_at_price + endif + endif + + if shop.metafields.app--168074346497.discount_percentage.value > 0.005 + assign discount_percentage = shop.metafields.app--168074346497.discount_percentage.value | times: 1.0 + assign deducted_percentage = 1.0 | minus: discount_percentage + + assign price = target.price | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil + assign price_min = price + assign price_max = product.price_max | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil + + assign compare_at_price = target.price + + if target.compare_at_price > compare_at_price + assign compare_at_price = target.compare_at_price + endif + endif + + if price < target.price and compare_at_price == 0 or compare_at_price == blank + assign compare_at_price = target.price + endif + else + assign price = product.metafields.app--168074346497.min_auto_discounted_price.value | default: product.price + + if product.metafields.app--168074346497.discount_percentage.value > 0.01 + assign deducted_percentage = 1.0 | minus: product.metafields.app--168074346497.discount_percentage.value + + assign price = product.price | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil + assign price_min = price + assign price_max = product.price_max | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil + + assign compare_at_price = product.price + + if product.compare_at_price > compare_at_price + assign compare_at_price = product.compare_at_price + endif + endif + + if shop.metafields.app--168074346497.discount_percentage.value > 0.005 + assign discount_percentage = shop.metafields.app--168074346497.discount_percentage.value | times: 1.0 + assign deducted_percentage = 1.0 | minus: discount_percentage + + assign price = product.price | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil + assign price_min = price + assign price_max = product.price_max | divided_by: 100.0 | times: deducted_percentage | times: 100.0 | ceil + + assign compare_at_price = product.price + + if product.compare_at_price > compare_at_price + assign compare_at_price = product.compare_at_price + endif + endif + + if price < product.price and compare_at_price == 0 or compare_at_price == blank + assign compare_at_price = product.price + endif + endif + + comment + end Yagi app code + endcomment + + assign money_price = price | money + assign money_price_min = price_min | money + assign money_price_max = price_max | money + if settings.currency_code_enabled + assign money_price = price | money_with_currency + assign money_price_min = price_min | money_with_currency + assign money_price_max = price_max | money_with_currency + endif + + if target == product and product.price_varies + assign from_money = money_price + + # Make the 'from' price be the cheapest AVAILABLE variant + if is_product_card and settings.card_include_unavailable_variants_in_sale_price != true + assign min_available_price = blank + assign min_available_compare_at_price = blank + + for v in product.variants + if v.available + if min_available_price == blank or v.price < min_available_price + assign min_available_price = v.price + assign min_available_compare_at_price = v.compare_at_price + endif + endif + endfor + + if min_available_price == blank + assign min_available_price = product.price_min + endif + + if min_available_compare_at_price == blank + assign min_available_compare_at_price = product.compare_at_price_min + endif + + assign from_money = min_available_price | money + + if settings.currency_code_enabled + assign from_money = min_available_price | money_with_currency + endif + + assign compare_at_price = min_available_compare_at_price + endif + + assign money_price = 'products.product.price.from_price_html' | t: price: from_money + endif + -%} + +
+
+ {%- comment -%} + Explanation of description list: + - div.price__regular: Displayed when there are no variants on sale + - div.price__sale: Displayed when a variant is a sale + {%- endcomment -%} + +
+ {%- if product.quantity_price_breaks_configured? -%} + {{ 'products.product.price.regular_price' | t }} + + {{- 'products.product.volume_pricing.price_range' | t: minimum: money_price_min, maximum: money_price_max -}} + + {%- if show_compare_at_price and compare_at_price -%} + {%- unless product.price_varies == false and product.compare_at_price_varies %} + + {{- 'products.product.price.regular_price' | t -}} + + + + {% if settings.currency_code_enabled %} + {{ compare_at_price | money_with_currency }} + {% else %} + {{ compare_at_price | money }} + {% endif %} + + + {%- endunless -%} + {%- endif -%} + {%- else -%} + {{ 'products.product.price.regular_price' | t }} + + {{ money_price }} + + {%- endif -%} +
+ +
+ {{ 'products.product.price.sale_price' | t }} + + {{ money_price }} + + {%- unless product.price_varies == false and product.compare_at_price_varies %} + {{ 'products.product.price.regular_price' | t }} + + + {% if settings.currency_code_enabled %} + {{ compare_at_price | money_with_currency }} + {% else %} + {{ compare_at_price | money }} + {% endif %} + + + {%- endunless -%} +
+ + + {{ 'products.product.price.unit_price' | t }} + + {{- product.selected_or_first_available_variant.unit_price | money -}} + +  {{ 'accessibility.unit_price_separator' | t }}  + + {%- if product.selected_or_first_available_variant.unit_price_measurement.reference_value != 1 -%} + {{- product.selected_or_first_available_variant.unit_price_measurement.reference_value -}} + {%- endif -%} + {{ product.selected_or_first_available_variant.unit_price_measurement.reference_unit }} + + + +
+
+{% endif %}