Ella/snippets/price.liquid
2025-02-17 12:35:22 +08:00

115 lines
5.9 KiB
Plaintext

{%- comment -%}
Renders a list of product's price (regular, sale)
Accepts:
- product: {Object} Product Liquid object (optional)
- use_variant: {Boolean} Renders selected or first variant price instead of overall product pricing (optional)
- show_badges: {Boolean} Renders 'Sale' and 'Sold Out' tags if the product matches the condition (optional)
- price_class: {String} Adds a price class to the price element (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 compare_at_price = target.compare_at_price
assign price = target.price | default: 1999
comment
[Yagi Automatic Discount Helper] start - overrride the price if there is auto discount applied from the app
endcomment
if use_variant
assign auto_discounted_price = target.metafields.app--168074346497.auto_discounted_price.value | default: target.price
else
assign auto_discounted_price = target.metafields.app--168074346497.min_auto_discounted_price.value | default: target.price
endif
if auto_discounted_price < price
assign price = auto_discounted_price
assign compare_at_price = target.price
endif
comment
[Yagi Automatic Discount Helper] end - overrride the price if there is auto discount applied from the app
endcomment
assign available = target.available | default: false
if settings.currency_format_enable
assign money_price = price | money_with_currency
else
assign money_price = price | money
endif
if target == product and product.price_varies
assign money_price = 'products.product.price.from_price_html' | t: price: money_price
endif
-%}
<div class="price
{%- if price_class %} {{ price_class }}{% endif -%}
{%- if available == false %} price--sold-out {% endif -%}
{%- if compare_at_price > price %} price--on-sale {% endif -%}
{%- if product.price_varies == false and product.compare_at_price_varies %} price--no-compare{% endif -%}">
<dl>
{%- 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
- div.price__availability: Displayed when the product is sold out
{%- endcomment -%}
<div class="price__regular">
{%- comment -%}
<dt>
<span class="visually-hidden visually-hidden--inline">{{ 'products.product.price.regular_price' | t }}</span>
</dt>
{%- endcomment -%}
<dd class="price__last"><span class="price-item price-item--regular">{{ money_price }}</span></dd>
</div>
<div class="price__sale">
{%- comment -%}
<dt class="price__compare">
<span class="visually-hidden visually-hidden--inline">{{ 'products.product.price.regular_price' | t }}</span>
</dt>
{%- endcomment -%}
<dd class="price__compare"><s class="price-item price-item--regular">{% if settings.currency_format_enable %}{{ compare_at_price | money_with_currency }}{% else %}{{ compare_at_price | money }}{% endif %}</s></dd>
{%- comment -%}
<dt>
<span class="visually-hidden visually-hidden--inline">{{ 'products.product.price.sale_price' | t }}</span>
</dt>
{%- endcomment -%}
<dd class="price__last"><span class="price-item price-item--sale">{{ money_price }}</span></dd>
{%- if settings.show_saved_price and price != nil and price != blank and compare_at_price != nil and compare_at_price != blank -%}
{%- assign saved_price = compare_at_price | minus: price | money -%}
<div class="price__saved"><span class="price-item price-item--saved">{{'products.product.price.saved_price_html' | t: price: saved_price }}</span></div>
{%- endif -%}
{%- if hasCountdown == true or hasCountdown == 'true' -%}
<dd class="price__label_sale">
{%- liquid
assign list_compare = product.variants | where: 'compare_at_price'
assign compare = 0
for variant in list_compare
assign saving = variant.compare_at_price | minus: variant.price | times: 100.0 | divided_by: variant.compare_at_price | round
if saving > compare
assign compare = saving
endif
endfor
if compare < 1
assign compare = product.compare_at_price_min | minus: product.price_min | times: 100.0 | divided_by: product.compare_at_price_min | round
endif
-%}<span class="label_sale">-{{ compare | append: '%'}}</span></dd>
{%- endif -%}
</div>
<small class="unit-price caption{% if available == false or product.selected_or_first_available_variant.unit_price_measurement == nil %} hidden{% endif %}">
<dt class="visually-hidden">{{ 'products.product.price.unit_price' | t }}</dt>
<dd class="price__last"><span>{{- product.selected_or_first_available_variant.unit_price | money -}}</span><span aria-hidden="true">/</span><span class="visually-hidden">&nbsp;{{ 'accessibility.unit_price_separator' | t }}&nbsp;</span><span>{%- 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 }}</span></dd>
</small>
</dl>
</div>