Мне нужно ввести код купона на странице моей корзины, но, похоже, он не работает в простой форме:
<input class = "discount-code-field" autocomplete = "off" type = "text" name = "discount" placeholder = "Enter coupon code here" />
У меня это прямо перед кнопкой отправки, внутри формы.
Активные купоны не применяются к заказу на странице оформления заказа.
Есть ли что-то еще, что мне нужно сделать, чтобы он работал?
Редактировать: Форма выглядит так -
<form action = "/cart" method = "post" class = "cart">
............
<div class = "bottom-box">
<input class = "discount-code-field" autocomplete = "off" type = "text" name = "discount" placeholder = "Enter coupon code here" />
<input type = "submit" value = "Proceed to checkout" name = "checkout" class = "cart-submit w-button"/>
</div>
</form>
И он перенаправляет на такой URL-адрес:
https://store.com/4934605xxxx/checkouts/04d6478feeb9d3262fbea5571b682ebc?_ga=2.260083023.358228188.1608464294-110675315.1604953057





Пока ваша корзина не использует AJAX для обновления и перенаправления, это должно работать.
Страница оформления заказа принимает аргумент получения ?discount=, и добавление поля с name = "discount" добавит этот аргумент к оформлению заказа.
Это работает, только если вы отправляете стандартную форму напрямую. (если вы обновите корзину, текст поля скидки не будет присутствовать, и вам нужно будет ввести его снова) Если вам нужно обновить форму, вам нужно будет каким-то образом сохранить код скидки, обновив корзину с помощью ajax или сохраняя его как файл cookie.
Итак, ваш код должен работать, я дважды проверил его в своем магазине разработки, и проблем нет, он применяет скидку к странице оформления заказа, поскольку присутствует аргумент get.
PS: Это не добавляет скидку к объекту корзины, это позволяет только перенаправлению оформления заказа включать аргумент get, ничего больше. Так что это эквивалентно созданию ссылки с <a href = "/checkout?discount=YOUR_CODE">Checkout</a>
Что, если я использую форму post? например <form action = "{{ routes.cart_url }}" method = "post" novalidate class = "cart">
@Ricardo форма корзины по умолчанию POST. Тем не менее, он установит скидку в качестве параметра запроса, это не поведение по умолчанию, но они делают там некоторую «магию», и она становится параметром запроса.
Любые идеи о том, как отладить, почему это не работает?
@Ricardo, вы ожидаете, что цены на странице корзины изменятся? (поскольку этого не произойдет) Пожалуйста, уточните, что вы подразумеваете под неработающим? Вы перенаправлены на страницу оформления заказа с аргументом get, присутствующим в URL-адресе, или нет? Если аргумент get отсутствует, значит, вы используете JS для перенаправления на страницу оформления заказа вместо обычной отправки формы.
Нет, мне не нужно обновлять номера на странице корзины. Я просто хочу, чтобы он применялся при оформлении заказа. Я обновил свой первоначальный вопрос, добавив больше кода и деталей.
@Ricardo, в вашем URL-адресе оформления заказа есть ?_ga=2.260083023.358228188.1608464294-110675315.1604953057, значит, его что-то меняет. Пожалуйста, отключите свой JS из опции отладчика консоли разработчика и проверьте, не работает ли он.
Да, это работает с отключенным JS. Буду разбираться, чем это вызвано.
В соответствии с документацией Shopify вы можете применять коды купонов только на странице оформления заказа, если вы хотите использовать их на странице корзины, вам нужно использовать для этого любое стороннее приложение.