Untitled

mail@pastecode.io avatar
unknown
plain_text
a month ago
16 kB
2
Indexable
Never
{% comment %}
  Accepts:
  - product: {Object} Product (required)
  - show_variant_options: {Boolean} Show variant swatches at the bottom (optional)
  - hide_title: {String} Hide product title (optional)
  - image_ratio: {String} Product media ratio (optional)
  - show_vendor: {Boolean} Show product vendor (optional)
  - show_cart_button: {Boolean} Show Add to cart button (optional)
  - show_quickview_button: {Boolean} Show Quickview button (optional)
  - show_wishlist_button: {Boolean} Show Wishlist button (optional)
  - column_wrapper: {Boolean} Wrap product card (optional)

  Usage:
  {% render 'product-card-4', product: product %}
{% endcomment %}

{% liquid
  if show_variant_options == nil 
    assign show_variant_options = settings.show_swatch_option
  endif

  assign show_title = true
  if hide_title == true
    assign show_title = false
  endif

  if image_ratio == nil or image_ratio == blank
    assign image_ratio = settings.pcard_image_ratio | default: '1/1'
  endif

  if image_ratio == 'original'
    assign image_ratio = product.featured_image.aspect_ratio | default: '1/1'
  endif

  if show_vendor == nil
    assign show_vendor = settings.show_vendor
  endif

  assign sold_out = false
  if product.available == false
    assign sold_out = true
  endif

  assign discount = ''
  assign compare_at_price = product.compare_at_price
  assign price = product.price
  assign on_sale = false
  if compare_at_price > price
    assign on_sale = true
    assign discount = compare_at_price | minus: price | times: 100 | divided_by: compare_at_price
  endif
          
  assign show_on_sale_badge = false
  if settings.on_sale_badge != 'hide' and on_sale
    assign show_on_sale_badge = true
  endif

  assign quick_add_text = 'products.product.quick_add' | t
  unless product.has_only_default_variant
    capture quick_add_text
      render 'new-locale', key: 'products.product.select_options'
    endcapture
  endunless

  assign sold_number = product.metafields.foxkit.sold_number

  if product.available 
    assign variant_id = product.first_available_variant.id
  else 
    assign variant_id = product.selected_or_first_available_variant.id
  endif
  assign selected_variant_id = ''
  if section.settings.change_product_variant_on_fitlering
    assign variant_id = product.selected_or_first_available_variant.id
    assign selected_variant_id = product.selected_variant.id
  endif

  if pcard_alignment == nil
    assign pcard_alignment = settings.pcard_alignment
  endif

  assign pcard_default_image = settings.pcard_default_image
  if image_ratio == nil or image_ratio == blank
    assign image_ratio = settings.pcard_image_ratio | default: '1/1'
  endif

  if show_cart_button == nil
    assign show_cart_button = settings.show_cart_button
  endif

  if show_quickview_button == nil
    assign show_quickview_button = settings.show_quickview_button
  endif

  if show_wishlist_button == nil
    assign show_wishlist_button = settings.show_wishlist_button
  endif

  if show_compare_button == nil
    assign show_compare_button = settings.show_compare_button
  endif

  assign preview_image = product.media[0].preview_image
  if section.settings.change_product_variant_on_fitlering == true and product.selected_variant.image != nil
    assign preview_image = product.selected_variant.image
  endif

  if image_ratio == 'original'
    assign image_ratio = product.media[0].aspect_ratio | default: '1/1'
  endif

  assign second_image = ''
  if settings.show_second_img and product.images.size > 1 and product.images[1] != blank
    assign second_image = product.images[1]
  endif

  assign product_card_classes = 'm-product-card m-product-card--style-4'
  if sold_out
    assign product_card_classes = product_card_classes | append: ' m-product-card--soldout'
  endif
  if on_sale
    assign product_card_classes = product_card_classes | append: ' m-product-card--onsale'
  endif
  if settings.show_second_img and second_image != blank
    assign product_card_classes = product_card_classes | append: ' m-product-card--show-second-img'
  endif
%}

{%- if column_wrapper -%}<div class="m:column">{%- endif -%}
  <div 
    class="{{ product_card_classes }}{% if animated %} m-scroll-trigger animate--{{ animation_effect }}{% endif %}" 
    data-view="card"
    {% if sold_number != blank %} 
      data-sold-number="{{ sold_number }}"
    {% endif %} 
    data-product-id="{{ product.id }}"
    {% if animated %}
      data-cascade
      style="--animation-order: {{ index }};"
    {% endif %}
  >  
      <div class="m-product-card__media">
          <a class="m-product-card__link m:block m:w-full" href="{{ product.url }}">
              {% if preview_image != blank %}
                <div class="m-product-card__main-image">
                  {%- liquid 
                    assign asp_rat = image_ratio | default: preview_image.aspect_ratio
                    if asp_rat == 'original'
                      assign asp_rat = preview_image.aspect_ratio
                    endif
                    assign alt = alt | default: preview_image.alt | escape
                  -%}
                  {%- capture sizes -%}(min-width: {{ settings.container_width }}px) {{ settings.container_width | minus: 130 | divided_by: 4 }}px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2){%- endcapture -%}
                  <responsive-image class="m-image"  style="--aspect-ratio: {{ asp_rat }}">
                    {{ preview_image | image_url: width: 1100 | image_tag: loading: 'lazy', class: 'm:w-full m:h-full', alt: alt, sizes: sizes, widths: '165, 360, 535, 750, 940, 1100' }}
                  </responsive-image>
                </div>
        
                {%- if second_image != blank -%}
                  <div class="m-product-card__hover-image">
                    {%- liquid 
                      assign asp_rat = image_ratio | default: second_image.aspect_ratio
                      if asp_rat == 'original'
                        assign asp_rat = second_image.aspect_ratio
                      endif
                      assign alt = alt | default: second_image.alt | escape
                    -%}
                    {%- capture sizes -%}(min-width: {{ settings.container_width }}px) {{ settings.container_width | minus: 130 | divided_by: 4 }}px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2){%- endcapture -%}
                    <responsive-image class="m-image"  style="--aspect-ratio: {{ asp_rat }}">
                      {{ second_image | image_url: width: 1100 | image_tag: loading: 'lazy', class: 'm:w-full m:h-full', alt: alt, sizes: sizes, widths: '165, 360, 535, 750, 940, 1100' }}
                    </responsive-image>
                  </div>
                {%- endif -%}
              {% else %}
                {% if pcard_default_image != blank %}
                  {%- liquid 
                    assign asp_rat = image_ratio | default: pcard_default_image.aspect_ratio
                    if asp_rat == 'original'
                      assign asp_rat = pcard_default_image.aspect_ratio
                    endif
                    assign alt = alt | default: pcard_default_image.alt | escape
                  -%}
                  {%- capture sizes -%}(min-width: {{ settings.container_width }}px) {{ settings.container_width | minus: 130 | divided_by: 4 }}px, (min-width: 990px) calc((100vw - 130px) / 4), (min-width: 750px) calc((100vw - 120px) / 3), calc((100vw - 35px) / 2){%- endcapture -%}
                  <responsive-image class="m-image"  style="--aspect-ratio: {{ asp_rat }}">
                    {{ pcard_default_image | image_url: width: 1100 | image_tag: loading: 'lazy', class: 'm:w-full m:h-full', alt: alt, sizes: sizes, widths: '165, 360, 535, 750, 940, 1100' }}
                  </responsive-image>
                {% else %}
                  <div style="--aspect-ratio: {{ image_ratio }}">
                    {{ 'product-1' | placeholder_svg_tag: 'm-placeholder-svg' }}
                  </div>
                {% endif %}
              {% endif %}
          </a>
          <div class="m-product-card__tags">
            {% if settings.show_badge_sale %}
              {% for tag in product.tags %}
                {% if tag contains 'tag__' %}
                  {%- liquid 
                    assign tag_content = tag | split: '__' | last
                    assign type = tag_content | split: '_' | first
                    assign tag_name = tag_content | split: '_' | last
                  -%}
                  <span class="m-product-card__tag-name m-product-tag m-product-tag--{{ type }}">{{ tag_name }}</span>
                {% endif %}
              {% endfor %}
            {% endif %}
            <span class="m-product-card__tag-name m-product-tag m-product-tag--preorder" data-foxkit-preorder-badge="{{ product.id }}"></span>
            {% if show_on_sale_badge %}
              {%- liquid 
                if settings.on_sale_badge == 'show_percentage'
                  assign sale_class = 'm-product-tag--discounted'
                else
                  assign sale_class = 'm-product-tag--sale'
                endif
              -%}
              <span class="m-product-card__tag-name m-product-tag {{ sale_class }}">
                {%- if settings.on_sale_badge == 'show_text' -%}
                  {{ 'products.product.on_sale' | t }}
                {%- elsif settings.on_sale_badge == 'show_percentage' -%}
                  {{ discount | append: '%' | prepend: '-' }}
                {%- endif -%}
              </span>
            {% endif %}
          </div>
          {%- if settings.show_badge_soldout -%}
            <span class="m-product-tag m-product-tag--soldout"{% unless sold_out %} style="display: none;"{% endunless %}>{{ 'products.product.sold_out' | t }}</span>
          {%- endif -%}
    
          {%- if show_quickview_button or show_wishlist_button or show_compare_button -%}
            <div class="m-product-card__action m:hidden md:m:flex">
              {% liquid
                assign tooltips = 'compare,quickview'
                assign tooltip_items = tooltips | split: ','
              %}
              
              {%- if show_wishlist_button -%}
                {% assign wishlist_app = settings.wishlist_app %}
                {% if wishlist_app == 'growave' %}
                  <div class="m-tooltip m-wishlist-button m-button--icon m-tooltip--style-1 m-tooltip--top">
                    <span class="m-tooltip-icon m:block">
                      {% capture the_snippet_fave_icon %}{% render 'ssw-widget-faveicon' with product.id %}{% endcapture %}
                      {% unless the_snippet_fave_icon contains 'Liquid error' %}
                        {{ the_snippet_fave_icon }}
                      {% else %}
                        {% render 'mm-ssw-widget-faveicon' with product.id %}
                      {% endunless %}
                    </span>
                    <div class="m-tooltip__content " data-revert-text="">
                      {{ 'products.product.add_to_wishlist' | t }}
                    </div>
                  </div>
                {% else %}
                  {% liquid 
                    render 'tooltip', type: 'wishlist', product: product, class_name: 'm-tooltip--top' 
                  %}
                {% endif %}
              {%- endif -%}
              
              {%- for tooltip in tooltip_items -%}
                {%- assign settings_key = 'show_' | append: tooltip | append: '_button' | replace: 'add-to-cart', 'cart' -%}
                {%- if [settings_key] -%}
                  {% render 'tooltip', type: tooltip, section: section, product: product, class_name: 'm-tooltip--top' %}
                {%- endif -%}
              {%- endfor -%}
            </div>
          {%- endif -%}

          {% liquid
            assign metafields_time = product.metafields.global['minimog_countdown']
            if settings.show_countdown and metafields_time != blank
              render 'countdown-timer', time: metafields_time, separator: false, short_label: true, extra_classes: 'm-product-card__countdown m:hidden' 
            endif
          %}
      </div>
      <div class="m-product-card__content m:text-{{ pcard_alignment }}">
        <div class="m-product-card__info">
          {%- if show_vendor -%}
            <span class="m-product-card__vendor">{{ product.vendor }}</span>
          {%- endif -%}
          {% if show_title == true %}
            <h3 class="m-product-card__title">
              <a href="{{ product.url }}" class="m-product-card__name{% if settings.uppercase_prd_name %} m:uppercase{% endif %}">
                {{ product.title }}
              </a>
            </h3>
          {% endif %}
          {% if settings.show_review_badge %}
            <div class="m-product-card__reviews m:text-color-body">
              {% render 'product-reviews-app__badge', product: product %}
            </div>
          {% endif %}
        
          <div class="m-product-card__price">
            {% render 'product-prices', product: product, is_product_card: true %}
          </div>
          {% if product.has_only_default_variant == false and show_variant_options %}
            {% render 'product-card-option', product: product, show_variant_options: show_variant_options, pcard_alignment: pcard_alignment %}
          {% endif %}
        </div>
    
        {%- if sold_out == false and show_cart_button -%}
          {% render 'product-card-quick-add-btn', product: product, quick_add_text: quick_add_text, section: section %}
        {%- endif -%}
    
        <div class="m-product-card__content-footer">
          <div class="m-product-card__description">
            {{ product.description | strip_html | truncatewords: 15, '...' }}
          </div>
          <div class="m-product-card__action">
            {% render 'product-card-quick-add-btn', product: product, quick_add_text: quick_add_text, section: section %}
            <div class="m-product-card__action-icons">
              {% liquid
                assign tooltips = 'compare,quickview,'
                assign tooltip_items = tooltips | split: ','

                if show_cart_button
                  render 'tooltip', type: 'add-to-cart', section: section, product: product, class_name: 'm-tooltip--top m-product-card__atc-button'
                endif
              %}

              {%- if show_wishlist_button -%}
                {% assign wishlist_app = settings.wishlist_app %}
                {% if wishlist_app == 'growave' %}
                  <div class="m-tooltip m-wishlist-button m-button--icon m-tooltip--style-1 m-tooltip--top">
                    <span class="m-tooltip-icon m:block">
                      {% capture the_snippet_fave_icon %}{% render 'ssw-widget-faveicon' with product.id %}{% endcapture %}
                      {% unless the_snippet_fave_icon contains 'Liquid error' %}
                        {{ the_snippet_fave_icon }}
                      {% else %}
                        {% render 'mm-ssw-widget-faveicon' with product.id %}
                      {% endunless %}
                    </span>
                    <div class="m-tooltip__content " data-revert-text="">
                      {{ 'products.product.add_to_wishlist' | t }}
                    </div>
                  </div>
                {% else %}
                  {% liquid 
                    render 'tooltip', type: 'wishlist', product: product, class_name: 'm-tooltip--top' 
                  %}
                {% endif %}
              {%- endif -%}
              
              {%- for tooltip in tooltip_items -%}
                {%- assign settings_key = 'show_' | append: tooltip | append: '_button' | replace: 'add-to-cart', 'cart' -%}
                {%- if [settings_key] -%}
                  {% render 'tooltip', type: tooltip, section: section, product: product, class_name: 'm-tooltip--top' %}
                {%- endif -%}
              {%- endfor -%}
            </div>
          </div>
        </div>
      </div>
    <input hidden name="id" required value="{{ variant_id }}" data-selected-variant="{{ selected_variant_id }}">
  </div> <!-- .m-product-card -->
{%- if column_wrapper -%}</div><!-- .m:column -->{%- endif -%}
Leave a Comment