From 7609909121677e79320a57af42bdf57f3bfbbeac Mon Sep 17 00:00:00 2001 From: Axel Date: Mon, 17 Feb 2025 13:02:58 +0800 Subject: [PATCH] first commit --- README.md | 6 + snippets/price-list.liquid | 231 +++++++++++++++++++++++++++++++++ snippets/product-badges.liquid | 119 +++++++++++++++++ 3 files changed, 356 insertions(+) create mode 100644 README.md create mode 100644 snippets/price-list.liquid create mode 100644 snippets/product-badges.liquid diff --git a/README.md b/README.md new file mode 100644 index 0000000..db05405 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# Prestige theme - Yagi Automatic Discount Helper app + +This repository contains installation guide for Prestige theme (developed by Maestrooo). + +This repository contains file in snippets folder, which you can copy paste and replace the existing file in your current Prestige theme, to display the automatic discounted price. + diff --git a/snippets/price-list.liquid b/snippets/price-list.liquid new file mode 100644 index 0000000..1c7e046 --- /dev/null +++ b/snippets/price-list.liquid @@ -0,0 +1,231 @@ +{%- comment -%} + ---------------------------------------------------------------------------------------------------------------------- + PRODUCT PRICE + ---------------------------------------------------------------------------------------------------------------------- + + Render a list of price for a product, variant or line item. + + ******************************************** + Supported variables + ******************************************** + + * product: if provided, the prices are rendered for the whole product + * variant: if provided, then only the price from this variant is rendered + * line_item: if provided, then the price from this line item are rendered (used on cart or order) + * hide_unit_price: if set to true unit prices are hidden (mostly useful for size constrained elements) + * context: can be "product", "line_item" or "card". This controls how the prices are displayed (using the correct sizes) +{%- endcomment -%} + +{%- liquid + case context + when 'card', 'line_item' + assign base_text_class = '' + + if settings.product_card_text_font == 'heading' + assign base_text_class = 'h6 ' + endif + + assign regular_price_classes = base_text_class | append: 'text-subdued' + assign on_sale_price_classes = base_text_class | append: 'text-on-sale' + assign compare_at_price_classes = base_text_class | append: 'text-subdued line-through' + assign unit_price_classes = base_text_class | append: 'text-subdued' + + + + when 'product' + assign regular_price_classes = base_text_class | append: 'h4 text-subdued' + assign on_sale_price_classes = base_text_class | append: 'h4 text-on-sale' + assign compare_at_price_classes = base_text_class | append: 'h5 text-subdued line-through' + assign unit_price_classes = base_text_class | append: 'h6 text-subdued' + endcase +-%} + + + {% assign variant_case_price = variant.price %} + {% assign variant_case_compare_at_price = variant.compare_at_price %} + + {% if variant.metafields.app--168074346497.auto_discounted_price.value %} + {% if variant.metafields.app--168074346497.auto_discounted_price.value < variant_case_price %} + {% assign variant_case_price = variant.metafields.app--168074346497.auto_discounted_price.value %} + {% assign variant_case_compare_at_price = variant.price %} + + {% if variant.compare_at_price > variant.price %} + {% assign variant_case_compare_at_price = variant.compare_at_price %} + {% endif %} + {% endif %} + {% endif %} + {%- if variant != blank -%} + {%- comment -%} + -------------------------------------------------------------------------------------------------------------------- + VARIANT CASE (used on product page, quick view...) + -------------------------------------------------------------------------------------------------------------------- + {%- endcomment -%} + + {{ 'product.price.sale_price' | t }} + + {%- if settings.currency_code_enabled -%} + {{- variant_case_price | money_with_currency -}} + {%- else -%} + {{- variant_case_price | money -}} + {%- endif -%} + + + {%- if variant_case_compare_at_price > variant_case_price -%} + + {{ 'product.price.regular_price' | t }} + + {%- if settings.currency_code_enabled -%} + {{- variant_case_compare_at_price | money_with_currency -}} + {%- else -%} + {{- variant_case_compare_at_price | money -}} + {%- endif -%} + + {%- endif -%} + {%- elsif line_item != blank -%} + {%- comment -%} + -------------------------------------------------------------------------------------------------------------------- + LINE ITEM CASE (used on cart, order page...) + -------------------------------------------------------------------------------------------------------------------- + {%- endcomment -%} + + {{ 'product.price.sale_price' | t }} + + {%- if settings.currency_code_enabled -%} + {{- line_item.final_price | money_with_currency -}} + {%- else -%} + {{- line_item.final_price | money -}} + {%- endif -%} + {%- if line_item.properties.ccalc == "true" -%} + / per Total Sq Ft. + {%- endif -%} + + + {%- if line_item.original_price > line_item.final_price -%} + + {{ 'product.price.regular_price' | t }} + + {%- if settings.currency_code_enabled -%} + {{- line_item.original_price | money_with_currency -}} + {%- else -%} + {{- line_item.original_price | money -}} + {%- endif -%} + + {%- endif -%} + {%- elsif product != blank -%} + {%- comment -%} + -------------------------------------------------------------------------------------------------------------------- + PRODUCT CASE (used on card) + -------------------------------------------------------------------------------------------------------------------- + {%- endcomment -%} + {%- liquid + if product.price_varies and settings.product_price_strategy != 'from_price' + assign variant = product.variants | sort: 'price' | last | default: product.selected_or_first_available_variant + else + assign variant = product.variants | sort: 'price' | first | default: product.selected_or_first_available_variant + endif + + if settings.currency_code_enabled + assign variant_price = variant.price | money_with_currency + assign variant_compare_at_price = variant.compare_at_price | money_with_currency + else + assign variant_price = variant.price | money + assign variant_compare_at_price = variant.compare_at_price | money + endif + + assign product_variant_price = variant.price + assign product_variant_compare_at_price = variant.compare_at_price + + if settings.product_price_strategy == 'from_price' and product.metafields.app--168074346497.min_auto_discounted_price.value + if product.metafields.app--168074346497.min_auto_discounted_price.value < variant.price + if settings.currency_code_enabled + assign variant_price = product.metafields.app--168074346497.min_auto_discounted_price.value | money_with_currency + assign variant_compare_at_price = variant.price | money_with_currency + + if variant.compare_at_price > variant.price + assign variant_compare_at_price = variant.compare_at_price | money_with_currency + endif + else + assign variant_price = product.metafields.app--168074346497.min_auto_discounted_price.value | money + assign variant_compare_at_price = variant.price | money + + if variant.compare_at_price > variant.price + assign variant_compare_at_price = variant.compare_at_price | money + endif + endif + + assign product_variant_price = product.metafields.app--168074346497.min_auto_discounted_price.value + assign product_variant_compare_at_price = variant.price + + if variant.compare_at_price > variant.price + assign product_variant_compare_at_price = variant.compare_at_price + endif + endif + endif + -%} + + {%- if product.price_varies -%} + {%- assign is_variant_on_sale = false -%} + + {%- if product_variant_price < product_variant_compare_at_price -%} + {%- assign is_variant_on_sale = true -%} + {%- endif -%} + + {%- if settings.product_price_strategy == 'from_price' -%} + + {{ 'product.price.sale_price' | t }} + {{- 'product.price.from_price_html' | t: price_min: variant_price -}} + + {%- else -%} + + {{ 'product.price.sale_price' | t }} + {{- variant_price -}} + + {%- endif -%} + {%- else -%} + + {{ 'product.price.sale_price' | t }} + {{- variant_price -}} + + {%- endif -%} + + {%- if product_variant_price < product_variant_compare_at_price -%} + + {{ 'product.price.regular_price' | t }} + {{- variant_compare_at_price -}} + + {%- endif -%} + {%- else -%} + {%- comment -%} + -------------------------------------------------------------------------------------------------------------------- + PLACEHOLDER CASE (used on featured product section for instance) + -------------------------------------------------------------------------------------------------------------------- + {%- endcomment -%} + + + {{ 'product.price.sale_price' | t }} + + {%- if settings.currency_code_enabled -%} + {{- 4999 | money_with_currency -}} + {%- else -%} + {{- 4999 | money -}} + {%- endif -%} + + {%- endif -%} + + {%- unless hide_unit_price -%} + {%- assign unit_price_item = variant | default: line_item | default: product.selected_or_first_available_variant -%} + + {%- if unit_price_item.unit_price -%} + + {%- assign unit_price_measurement = unit_price_item.unit_price_measurement -%} + + {%- if unit_price_measurement.reference_value != 1 -%} + {%- assign reference_value = unit_price_measurement.reference_value -%} + {%- endif -%} + + ({{ unit_price_item.unit_price | money }}/{{ reference_value -}} + {{- unit_price_measurement.reference_unit }}) + + {%- endif -%} + {%- endunless -%} + diff --git a/snippets/product-badges.liquid b/snippets/product-badges.liquid new file mode 100644 index 0000000..2b3fcf4 --- /dev/null +++ b/snippets/product-badges.liquid @@ -0,0 +1,119 @@ +{%- comment -%} +---------------------------------------------------------------------------------------------------------------------- +PRODUCT BADGES COMPONENT +---------------------------------------------------------------------------------------------------------------------- + +This component is used in product listing and product page to render the badges of a given product + +******************************************** +Supported variables +******************************************** + +* product: the product to render the badges +* variant: the specific variant to show the badge from +* vertical: if set to true, the badges are outputted vertically +* types: the types of badge to output. Can be "custom", "sold_out" or "discount" (or a combination separated by comma). If nothing is set, all badges are outputted. +* context: can be "product" or "card" +{%- endcomment -%} + +{%- liquid + assign badge_types = types | default: 'custom, sold_out, discount' | split: ',' + assign variant = variant | default: product.selected_or_first_available_variant +-%} + +{%- capture badges -%} + {%- for badge_type in badge_types -%} + {%- assign stripped_badge_type = badge_type | strip -%} + + {%- case stripped_badge_type -%} + {%- when 'custom' -%} + {%- assign custom_badges = product.metafields.custom.badges.value -%} + + {%- for custom_badge in custom_badges -%} + {{ custom_badge }} + {%- endfor -%} + + {%- when 'sold_out' -%} + {%- if settings.show_sold_out_badge and variant.available == false -%} + + {{- 'product.general.sold_out_badge' | t -}} + + {%- endif -%} + + {%- when 'discount' -%} + {%- if settings.show_discount -%} + {%- liquid + assign show_on_sale_badge = false + + assign variant_price = variant.price + assign variant_compare_at_price = variant.compare_at_price + + assign product_price = product.price + assign product_compare_at_price = product.compare_at_price + + if variant.metafields.app--168074346497.auto_discounted_price.value + if variant.metafields.app--168074346497.auto_discounted_price.value < variant.price + assign variant_price = variant.metafields.app--168074346497.auto_discounted_price.value + assign variant_compare_at_price = variant.price + + if variant.compare_at_price > variant.price + assign variant_compare_at_price = variant.compare_at_price + endif + endif + endif + + if product.metafields.app--168074346497.min_auto_discounted_price.value + if product.metafields.app--168074346497.min_auto_discounted_price.value < product.price + assign product_price = product.metafields.app--168074346497.min_auto_discounted_price.value + assign product_compare_at_price = product.price + + if product.compare_at_price > product.price + assign product_compare_at_price = product.compare_at_price + endif + endif + endif + + if context == 'product' + if variant_compare_at_price > variant_price + assign show_on_sale_badge = true + endif + elsif context == 'card' + if product_compare_at_price > product_price + assign show_on_sale_badge = true + endif + endif + -%} + + {%- if product_compare_at_price > product_price -%} + {%- if settings.discount_mode == 'percentage' -%} + {%- assign savings = variant_compare_at_price | minus: variant_price | times: 100.0 | divided_by: variant_compare_at_price | round | append: '%' -%} + {%- else -%} + {%- capture savings -%}{{ variant_compare_at_price | minus: variant_price | money }}{%- endcapture -%} + {%- endif -%} + + {%- if show_on_sale_badge -%} + + {%- liquid + if context == 'product' + echo 'product.general.discount_badge_html' | t: savings: savings + elsif context == 'card' + if product.compare_at_price_varies or variant_compare_at_price == blank + echo 'product.general.on_sale_badge' | t + else + echo 'product.general.discount_badge_html' | t: savings: savings + endif + endif + -%} + + {%- endif -%} + {%- endif -%} + {%- endif -%} + {%- endcase -%} + {%- endfor -%} +{%- endcapture -%} + +{%- if badges != blank -%} + + {{- badges -}} + +{%- endif -%} \ No newline at end of file