Корзина

Введение

В интернет-магазине корзина находится на странице /cart_items.

Для изменения состава корзины предусмотрено три операции:

  1. добавление позиции,
  2. обновление позиции,
  3. групповое изменение состава корзины (с его помощью сделана кнопка пересчитать на странице корзины в стандартных шаблонах).

Все операции, меняющие состав корзины, осуществляются путем отправления POST запроса на URL /cart_items. Можно ограничиться обычными html формами, можно манипулировать корзиной при помощи ajax запросов, для этого надо использовать URL /cart_items.json. Содержание запросов не зависит от того, каким из двух способов вы работаете с корзиной.

Если вы используете html форму, то после выполнения операции покупатель будет перенаправляться на страницу корзины.

Добавление позиции

Параметры запроса:

  • variant_id - id модификации
  • quantity - добавляемое в корзину количество
  • comment - комментарий к позиции заказа


Если вы используете ajax запрос, то вам вернут объект в JSON формате с атрибутами:

  • items - описание позиций;
  • items_count - количество позиций;
  • total_price - стоимость заказа с учетом скидок и стоимости доставки;
  • currency - обозначение валюты, указанное в настройках валюты;
  • currency_format - формат вывода стоимости, указанный в настройках валюты.
  • и т.д.
js
        
          

/* Пример на jQuery */
$.post('/cart_items.json', {
    variant_id: 104490412,
    quantity: 1,
    comment: "test comment"
  })
  .done(function (cart) {
    console.log(cart);
  })

Добавление нескольких позиций

Параметры запроса:

  • variant_ids[id] - добавляемое в корзину количество экземпляром модификации с идентификатором id

Если вы используете ajax запрос, то вам вернут объект в JSON формате с атрибутами:

  • items - описание позиций;
  • items_count - количество позиций;
  • total_price - стоимость заказа с учетом скидок и стоимости доставки;
  • currency - обозначение валюты, указанное в настройках валюты;
  • currency_format - формат вывода стоимости, указанный в настройках валюты.
  • и т.д.
js
        
          

/* Пример на jQuery */
$.post('/cart_items.json', {
  variant_ids: {
    98156648: 1,
    98156640: 2
    }
  })
  .done(function (cart) {
    console.log(cart);
  })

Удаление позиции

URL запроса: /cart_items/id

где id - идентификатор модификации

Параметры запроса:

  • _method - строка 'delete'

Если вы используете ajax запрос, то вам вернут объект в JSON формате с атрибутами:

  • items_count - количество позиций;
  • total_price - стоимость заказа с учетом скидок и стоимости доставки;
  • currency - обозначение валюты, указанное в настройках валюты;
  • currency_format - формат вывода стоимости, указанный в настройках валюты.
  • и т.д.
js
        
          

/* Пример на jQuery */
$.post('/cart_items/98156178.json', {
    _method: "delete"
  })
  .done(function (cart) {
    console.log(cart);
  })

Обновление состава корзины

Позволяет одновременно добавлять и удалять позиции, так же позволяет менять количество заказываемых товаров.

Параметры запроса:

  • _method - строка 'put'
  • cart[quantity][id модификации] - количество (если вы хотите удалить позицию, то 0)
  • cart[order_line_comments][id модификации] - текст комментария к позиции заказа

Если модификация, есть в корзине, а ее в запросе не упомянули, то она удаляется из корзины. Если в количестве указан 0, то модификация опять же удаляется из корзины.

Если вы используете ajax запрос, то вам вернут объект в JSON формате с атрибутами:

  • total_price - стоимость заказа с учетом скидок и стоимости доставки;
  • currency - обозначение валюты, указанное в настройках валюты;
  • currency_format - формат вывода стоимости, указанный в настройках валюты.
  • и т.д.
Liquid
        
          

<form action="/cart_items" id="cartform" method="post">
  <input type="hidden" value="put" name="_method">
  <table>
  {% for item in cart.items %}
    <tr>
      <td><a href="{{ item.product.url }}">{{ item.title | escape }}</a></td>
      <td><input type="text" value="{{ item.quantity }}" name="cart[quantity][{{ item.id }}]"/><td>
      <td><input type="text" value="{{ item.comment }}" name="cart[order_line_comments][{{ item.id }}]"/><td>
   </tr>
  {% endfor %}
  </table>
</form>