Присвоить значение существующей переменной - PullRequest
0 голосов
/ 27 января 2020

Цель состоит в том, чтобы проверить наличие товара в корзине, затем, если он существует, переназначить item.product.id значение другого идентификатора продукта.

Назначение не работает в моем коде ниже. Вывод равен исходному значению.

{% for item in cart.items %}

{% if item.product.id == 4456879030362 %}
    {% assign item.product.id = 3962085671002 %}
    <div class="upsell-pop" style="text-align:center; width: 100%; border: 1px solid red;">
      <h4>Frequently bought together</h4>
        <p><a href="{{item.product.url}}">{{ item.product.title }}</a></p>
        <img src="{{ item.image.src | product_img_url: 'medium' }}">
        <span class="h3 price text-center">
          {% if item.original_price > item.final_price %}
            <s>{{ item.original_price | money }}</s>
          {% endif %}
          {{ item.final_price | money }}
        </span>
        <form action="/cart/add" data-productid="{{item.product.id}}"  method="post"> 
            <input type="hidden" name="id" data-productid="{{item.product.id}}" class="product-select" value="{{ item.product.variants[0].id }}" data-variant-title="{{ item.product.variants[0].title }}" />
            <input type="submit" value="Add To Cart" />
        </form>
    </div>
{% endif %}

{% endfor %}

Ответы [ 2 ]

0 голосов
/ 01 февраля 2020

Если я хорошо понимаю, то, что вы пытаетесь достичь, это отобразить добавленную в корзину форму добавления товара, если указанный продукт c находится в корзине.

Первый , как объяснялось в капельнице Вы не можете переназначить существующее значение атрибута объекта, записанное в базе данных. Вы можете создавать новые переменные только с помощью тега assign.

Но хорошая новость заключается в том, что вам не нужно делать то, что вы хотите.

Затем в Shopify ключом для объекта является атрибут handle, а не атрибут ID. Например, чтобы получить указанный c продукт, вы можете сделать это с помощью его дескриптора:

{{ all_products['my-product-handle'].title }}

Вы также должны учитывать, что вам нужно добавлять кавычки, когда вы используете строку в таком состоянии, как это :

{% if product.handle == 'foo' %}

Итак, , чтобы достичь своей цели, вы можете попробовать это:

{% for item in cart.items %}
  {% if item.product.handle == 'my-upsell-trigger-product-handle' %}
   {% assign upsell_product = all_products['my-upsell-product-handle'] %}
     {{ upsell_product.title }}
     {% form "product", upsell_product %}
        <input type="hidden" name="id" value="{{ upsell_product.selected_or_first_available_variant.id }}">
        <input type="submit" value="Add to cart" />
      {% endform %}
  {% endif %}
{% endfor %}

Не проверено, но это должно работать!

HTH

Полезная документация:

Ручки: https://help.shopify.com/en/themes/liquid/basics/handle

Basi c операторы: https://help.shopify.com/en/themes/liquid/basics/operators#basic -операторы

Глобальные объекты: https://help.shopify.com/en/themes/liquid/objects#global -объекты

Форма заказа: https://help.shopify.com/en/themes/development/templates/product-liquid#build -the- html -форма

0 голосов
/ 28 января 2020

Я не уверен, пытаетесь ли вы обновить значение с помощью жидкости (что невозможно) или используете форму (которая не работает так, как вы описываете).


1) Вы можете переназначить объекты

Это недействительный код {% assign item.product.id = 3962085671002 %}.

Назначение используется для создания или перезаписи переменных. Вы не можете использовать его для изменения объектов и их значений.

2) Когда вы обновляете корзину, вы должны сделать это через JS.

Если вы не хотите менять местами Для указания c товара из корзины вы должны использовать конец /cart/update.js, см. документы для справки: https://help.shopify.com/en/themes/development/getting-started/using-ajax-api#update -cart

3) Когда вы добавляете товары в корзину Вы должны использовать их variant.id.

Все продукты в Shopify используют варианты (даже если у них их нет, у них есть скрытый по умолчанию), которые вы покупаете. Таким образом, вы должны передать variant.id, а не product.id.

. Поэтому, если вы хотите поменять местами определенный продукт c, используя cart/update.js, вы должны нацелиться на variant.id.


Так что же вам делать?

Вы все еще можете проверить {% if item.product.id == 4456879030362 %}, но в этот момент у вас есть несколько вариантов.

1) Добавить специфицированный c класс к элементу и нацельте этот класс с помощью javascrip, чтобы заменить элемент на новый из внешнего файла javascript.

2) Добавьте код JS непосредственно в оператор IF и поменяйте местами продукт с /cart/update.js еще раз.

{% for item in cart.items %}
    {% if item.product.id == 4456879030362 %}
        <script>
            jQuery.post('/cart/update.js',
            "updates[{{item.id}}]=0&updates[{{YOUR_NEW_VARIANT_ID}}]=1"
            );
        </script>

        ...
    {% endif %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...