Shopify - дебютная тема - как изменить количество и вкусовые вариации из раскрывающегося меню в кнопки - PullRequest
0 голосов
/ 09 мая 2020

У нас есть дебютная тема с разделом рекомендуемых продуктов. Текущий селектор размера и вкуса представляет собой раскрывающееся меню: enter image description here

Мы хотим, чтобы изменения размера и вкуса стали кнопками, например: enter image description here

У меня есть некоторый опыт HTML и CSS, но я не знаком с синтаксисом Shopify. Я не уверен, какой код редактировать. Ниже приведен наш код, непосредственно образующий файл «Feature-products.liquid». Я видел этот ответ, но я не уверен, что именно здесь делать - когда я пытаюсь воспроизвести его, я не могу получить ответ разворачивающиеся кнопки превращаются в кнопки.

{%- assign product = all_products[section.settings.featured_product] -%}


{% if product == empty %}
  {%- assign section_onboarding = true -%}
{% endif %}

<div class="page-width" id="ProductSection-{{ section.id }}" data-section-id="{{ section.id }}" data-section-type="product" data-ajax-enabled="{{ settings.enable_ajax }}">
  {% comment %}
    Get first variant, or deep linked one
  {% endcomment %}
  {%- assign current_variant = product.selected_or_first_available_variant -%}
  {%- assign product_thumb_size = '110x110' -%}
  {%- assign product_image_zoom_size = '1024x1024' -%}
  {%- assign product_image_scale = '2' -%}
  {%- assign enable_image_zoom = section.settings.enable_image_zoom -%}

  {% case section.settings.media_size %}
    {% when 'small' %}
      {%- assign product_media_width = 'medium-up--one-third' -%}
      {%- assign product_description_width = 'medium-up--two-thirds' -%}
      {%- assign height = 345 -%}
    {% when 'medium' %}
      {%- assign product_media_width = 'medium-up--one-half' -%}
      {%- assign product_description_width = 'medium-up--one-half' -%}
      {%- assign height = 530 -%}
    {% when 'large' %}
      {%- assign product_media_width = 'medium-up--two-thirds' -%}
      {%- assign product_description_width = 'medium-up--one-third' -%}
      {%- assign height = 720 -%}
    {% when 'full' %}
      {%- assign product_media_width = '' -%}
      {%- assign product_description_width = '' -%}
      {%- assign height = 1090 -%}
      {%- assign enable_image_zoom = false -%}
  {% endcase %}

  <div class="grid product-single{% if section.settings.enable_payment_button %} product-single--{{ section.settings.media_size }}-media{% endif %}">
    <div class="grid__item product-single__media-group {{ product_media_width }}{% if section.settings.media_size == 'full' %} product-single__media-group--full{% endif %}" data-product-single-media-group>
      {% unless section_onboarding %}
        {%- assign featured_media = product.selected_or_first_available_variant.featured_media | default: product.featured_media -%}

        {%- for media in product.media -%}
          {% include 'media', media: media, featured_media: featured_media, height: height, enable_image_zoom: enable_image_zoom, image_zoom_size: product_image_zoom_size, image_scale: product_image_scale %}
        {%- endfor -%}

        <noscript>
          {% capture product_image_size %}{{ height }}x{% endcapture %}
          <img src="{{ featured_media | img_url: product_image_size, scale: product_image_scale }}" alt="{{ featured_media.alt }}" id="FeaturedMedia-{{ section.id }}" class="product-featured-media" style="max-width: {{ height }}px;">
        </noscript>

        {% assign first_3d_model = product.media | where: "media_type", "model" | first %}

        {%- if first_3d_model -%}
          <button
            aria-label="{{ 'products.product.view_in_space_label' | t }}"
            class="product-single__view-in-space"
            data-shopify-xr
            data-shopify-model3d-id="{{ first_3d_model.id }}"
            data-shopify-title="{{ product.title | escape }}"
            data-shopify-xr-hidden
          >
            {% include 'icon-3d-badge-full-color' %}<span class='product-single__view-in-space-text'>{{ 'products.product.view_in_space' | t }}</span>
          </button>
        {%- endif -%}

      {% else %}
        <div id="FeaturedImageZoom-{{ section.id }}" class="product-single__media">
          {{ 'product-1' | placeholder_svg_tag: 'placeholder-svg' }}
        </div>
      {% endunless %}

      {% if product.media.size > 1 %}
        {% if product.media.size > 4 %}
          {%- assign enable_thumbnail_slides = true -%}
        {% endif %}

        <div class="thumbnails-wrapper{% if enable_thumbnail_slides == true %} thumbnails-slider--active{% endif %}">
          {% if enable_thumbnail_slides == true %}
            <button type="button" class="btn btn--link medium-up--hide thumbnails-slider__btn thumbnails-slider__prev thumbnails-slider__prev--{{ section.id }}">
              {% include 'icon-chevron-left' %}
              <span class="icon__fallback-text">{{ 'sections.slideshow.previous_slide' | t }}</span>
            </button>
          {% endif %}
          <ul class="product-single__thumbnails product-single__thumbnails-{{ section.id }}">
            {% for media in product.media %}
              <li class="product-single__thumbnails-item product-single__thumbnails-item--{{ section.settings.media_size }} js">
                <a href="{{ media.preview_image | img_url: product_image_zoom_size, scale: product_image_scale }}"
                  class="text-link product-single__thumbnail product-single__thumbnail--{{ section.id }}"
                  data-thumbnail-id="{{ section.id }}-{{ media.id }}"
                  {% if enable_image_zoom %}data-zoom="{{ media.preview_image | img_url: product_image_zoom_size, scale: product_image_scale }}"{% endif %}>

                    {%- capture thumbnailAlt -%}
                      {%- if media.media_type == 'video' or media.media_type == 'external_video' -%}
                        {{ 'sections.featured_product.video_thumbnail_alt' | t: imageAlt: media.alt | escape }}
                      {%- elsif media.media_type == 'model' -%}
                        {{ 'sections.featured_product.model_thumbnail_alt' | t: imageAlt: media.alt | escape }}
                      {%- else -%}
                        {{ 'sections.featured_product.gallery_thumbnail_alt' | t: imageAlt: media.alt | escape }}
                      {%- endif -%}
                    {%- endcapture -%}

                    <img class="product-single__thumbnail-image" src="{{ media.preview_image | img_url: '110x110', scale: 2 }}" alt="{{ thumbnailAlt }}">
                    {%- if media.media_type == 'video' or media.media_type =='external_video' -%}
                      <div class="product-single__thumbnail-badge">
                        {% include 'icon-video-badge-full-color' %}
                      </div>
                    {%- endif -%}
                    {%- if media.media_type == 'model' -%}
                      <div class="product-single__thumbnail-badge">
                        {% include 'icon-3d-badge-full-color' %}
                      </div>
                    {%- endif -%}
                </a>
              </li>
            {% endfor %}
          </ul>
          {% if enable_thumbnail_slides == true %}
            <button type="button" class="btn btn--link medium-up--hide thumbnails-slider__btn thumbnails-slider__next thumbnails-slider__next--{{ section.id }}">
              {% include 'icon-chevron-right' %}
              <span class="icon__fallback-text">{{ 'sections.slideshow.next_slide' | t }}</span>
            </button>
          {% endif %}
        </div>
      {% endif %}
    </div>

    <div class="grid__item {{ product_description_width }}">
      <div class="product-single__meta">
        {% unless section_onboarding %}
          {%- assign price = current_variant.price -%}
          {%- assign available = current_variant.available -%}
        {% else %}
          {%- assign price = 1999 -%}
          {%- assign available = true -%}
        {% endunless %}
        <h2 class="visually-hidden">{{ 'sections.featured_product.title' | t }}</h2>
        <h3 class="h1 product-single__title">
          {% unless product == empty %}
            {{ product.title }}
          {% else %}
            {{ 'homepage.onboarding.product_title' | t }}
          {% endunless %}
        </h3>

        <div>
          <div class="featured-product__price">
            {% include 'product-price', variant: current_variant, product: product, show_vendor: section.settings.show_vendor %}
          </div>

          {%- if shop.taxes_included or shop.shipping_policy.body != blank -%}
            <div class="product__policies rte" data-product-policies>
              {%- if shop.taxes_included -%}
                {{ 'products.product.include_taxes' | t }}
              {%- endif -%}
              {%- if shop.shipping_policy.body != blank -%}
                {{ 'products.product.shipping_policy_html' | t: link: shop.shipping_policy.url }}
              {%- endif -%}
            </div>
          {%- endif -%}

          {% if section_onboarding %}
            <div class="product-form">
              <div class="product-form__item product-form__item--submit{% if product.has_only_default_variant %} product-form__item--no-variants{% endif %}">
                <button type="submit" name="add" disabled class="btn product-form__cart-submit" data-add-to-cart>
                  <span data-add-to-cart-text>
                      {{ 'products.product.sold_out' | t }}
                  </span>
                </button>
              </div>
            </div>
          {% else %}
            {% capture "form_classes" -%}
              product-form product-form-{{ section.id }}
              {%- unless section.settings.show_variant_labels %} product-form--hide-variant-labels{% endunless %}
              {%- if section.settings.enable_payment_button and product.has_only_default_variant%} product-form--payment-button-no-variants{% endif %}
              {%- if current_variant.available == false %} product-form--variant-sold-out {%- endif -%}
            {%- endcapture %}
            {% form 'product', product, class:form_classes, novalidate: 'novalidate', data-product-form: '' %}
              {% unless section_onboarding %}
                {% unless product.has_only_default_variant %}
                  <div class="product-form__controls-group">
                    {% for option in product.options_with_values %}
                      <div class="selector-wrapper js product-form__item">
                        <label {% if option.name == 'default' %}class="label--hidden" {% endif %}for="SingleOptionSelector-{{ section.id }}-{{ forloop.index0 }}">
                          {{ option.name }}
                        </label>
                        <select class="single-option-selector single-option-selector-{{ section.id }} product-form__input" id="SingleOptionSelector-{{ section.id }}-{{ forloop.index0 }}" data-index="option{{ forloop.index }}">
                          {% for value in option.values %}
                            <option value="{{ value | escape }}"{% if option.selected_value == value %} selected="selected"{% endif %}>{{ value }}</option>
                          {% endfor %}
                        </select>
                      </div>
                    {% endfor %}
                  </div>
                {% endunless %}

                <select name="id" id="ProductSelect-{{ section.id }}" class="product-form__variants no-js">
                  {% for variant in product.variants %}
                    <option value="{{ variant.id }}"
                      {%- if variant == current_variant %} selected="selected" {%- endif -%}
                    >
                      {{ variant.title }}  {%- if variant.available == false %} - {{ 'products.product.sold_out' | t }}{% endif %}
                    </option>
                  {% endfor %}
                </select>
              {% endunless %}
              {% if section.settings.show_quantity_selector %}
                <div class="product-form__controls-group">
                  <div class="product-form__item">
                    <label for="Quantity-{{ section.id }}">{{ 'products.product.quantity' | t }}</label>
                    <input type="number" id="Quantity-{{ section.id }}"
                      name="quantity" value="1" min="1" pattern="[0-9]*"
                      class="product-form__input product-form__input--quantity"
                      data-quantity-input>
                  </div>
                </div>
              {% endif %}

              <div class="product-form__error-message-wrapper product-form__error-message-wrapper--hidden{% if section.settings.enable_payment_button %} product-form__error-message-wrapper--has-payment-button{% endif %}" data-error-message-wrapper role="alert">
                <span class="visually-hidden">{{ 'general.accessibility.error' | t }} </span>
                {% include 'icon-error' %}
                <span class="product-form__error-message" data-error-message>{{ 'products.product.quantity_minimum_message' | t }}</span>
              </div>

              <div class="product-form__controls-group product-form__controls-group--submit">
                <div class="product-form__item product-form__item--submit
                      {%- if section.settings.enable_payment_button %} product-form__item--payment-button {%- endif -%}
                      {%- if product.has_only_default_variant %} product-form__item--no-variants {%- endif -%}"
                >
                  <button type="submit" name="add"
                    {% unless current_variant.available %} aria-disabled="true"{% endunless %}
                    aria-label="{% unless current_variant.available %}{{ 'products.product.sold_out' | t }}{% else %}{{ 'products.product.add_to_cart' | t }}{% endunless %}"
                    class="btn product-form__cart-submit{% if section.settings.enable_payment_button %} btn--secondary-accent{% endif %}"
                    data-add-to-cart>
                    <span data-add-to-cart-text>
                      {% unless current_variant.available %}
                        {{ 'products.product.sold_out' | t }}
                      {% else %}
                        {{ 'products.product.add_to_cart' | t }}
                      {% endunless %}
                    </span>
                    <span class="hide" data-loader>
                      {% include 'icon-spinner' %}
                    </span>
                  </button>
                  {% if section.settings.enable_payment_button %}
                    {{ form | payment_button }}
                  {% endif %}
                </div>
              </div>
            {% endform %}
          {% endif %}
        </div>

        {%- comment -%}
          Live region for announcing updated price and availability to screen readers
        {%- endcomment -%}
        <p class="visually-hidden" data-product-status
          aria-live="polite"
          role="status"
        ></p>

        {%- comment -%}
          Live region for announcing that the product form has been submitted and the
          product is in the process being added to the cart
        {%- endcomment -%}
        <p class="visually-hidden" data-loader-status
          aria-live="assertive"
          role="alert"
          aria-hidden="true"
        >{{ 'products.product.loader_label' | t }}</p>

        <div class="product-single__description rte">
          {% unless product == empty %}
            {{ product.description }}
          {% else %}
            {{ 'homepage.onboarding.product_description' | t }}
          {% endunless %}
        </div>

        {% if section.settings.show_share_buttons %}
          {% include 'social-sharing', share_title: product.title, share_permalink: product.url, share_image: product %}
        {% endif %}
      </div>
    </div>
  </div>
</div>

{% unless product == empty %}
  <script type="application/json" id="ProductJson-{{ section.id }}">
    {{ product | json }}
  </script>
  <script type="application/json" id="ModelJson-{{ section.id }}">
    {{ product.media | where: 'media_type', 'model' | json }}
  </script>
{% endunless %}



<script type="application/ld+json">
{
  "@context": "http://schema.org/",
  "@type": "Product",
  "name": {{ product.title | json }},
  "url": {{ shop.url | append: product.url | json }},
  {%- if product.featured_media -%}
    {%- assign media_size = product.featured_media.preview_image.width | append: 'x' -%}
    "image": [
      {{ product.featured_media | img_url: media_size | prepend: "https:" | json }}
    ],
  {%- endif -%}
  "description": {{ product.description | strip_html | json }},
  {%- if current_variant.sku != blank -%}
    "sku": {{ current_variant.sku | json }},
  {%- endif -%}
  "brand": {
    "@type": "Thing",
    "name": {{ product.vendor | json }}
  },
  "offers": [
    {%- for variant in product.variants -%}
      {
        "@type" : "Offer",
        {%- if variant.sku != blank -%}
          "sku": {{ variant.sku | json }},
        {%- endif -%}
        "availability" : "http://schema.org/{% if product.available %}InStock{% else %}OutOfStock{% endif %}",
        "price" : {{ variant.price | divided_by: 100.00 | json }},
        "priceCurrency" : {{ cart.currency.iso_code | json }},
        "url" : {{ shop.url | append: variant.url | json }}
      }{% unless forloop.last %},{% endunless %}
    {%- endfor -%}
  ]
}
</script>
...