Перейти к содержанию

Как добавить опцию товара в корзину через cart.add? (OpentCart 2.x)


Pascha
 Поделиться

Рекомендуемые сообщения

Перед тем как приступить к самому примеру, давайте разберемся что представляет из себя опция товара в системе OpenCart 2.x. Каждый товар в интернет магазине может иметь набор определённых свойств и характеристик. Ярким примером такой разновидности может быть цвет, размер, и другие параметры, которые так же могут характеризовать какую-либо разновидность товара. В каталоге, таким образом, отображается карточка товара, с возможностью выбора параметров для покупателя. В корзину товар попадает именно в таком виде, каким его выбрал пользователь. По умолчанию в стандартных шаблонах карточка товара этот функционал уже содержит, и производить манипуляции с кодом добавления товара в корзину как правило не возникает.

Но как только вы отходите от стандартного функционала шаблонов, возникает необходимость находить решения различного рода задач.
Итак, товар в корзину добавляется через ajax посредством функции cart.add. Если посмотреть на код ajax-запроса, то мы можем заметить участок кода похожий на этот:

$.ajax({
    url: 'index.php?route=checkout/cart/add',
    type: 'post',
    data: 'product_id=' + product_id + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1),
...

В параметре data как раз и передаются все основные данные о товаре для POST-запроса. Всё что следует сделать для передачи опции товара, немного видоизменить передачу параметров, создав отдельный объект JS.

var productData = {
        'product_id' : PRODUCT_IDS.CARD,
        'quantity': 1,
        'option': {
            '229': "Some option value"
        }
    };

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

$.ajax({
    url: 'index.php?route=checkout/cart/add',
    type: 'post',
    data: $.param(productData),
    dataType: 'json',
    success: function (json) {
     
    },
    error: function (xhr, ajaxOptions, thrownError) {
 
    }
});

На стороне сервера в php-скрипте параметр option по умолчанию обрабатывается такой строкой:

if (isset($this->request->post['option'])) {
    $option = array_filter($this->request->post['option']);
} else {
    $option = array();
}

Изменять на стороне php-скрипта в этом случае ничего не нужно, код показан для информации. Администраторы сайта добавляют товары, а также опции товаров и их ценовое значение. После того как покупатель кладёт товар в корзину, цена так же будет пересчитываться в зависимости от выбранной им опции. Ценовая сетка так же предварительно проставляется при добавлении значений опций. Т.е. каждое значение опции может определять ценообразование товара.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

 Поделиться

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...