О web-разработке
и даже немного больше...

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

Всем привет. Перед тем как приступить к самому примеру, давайте разберемся что представляет из себя опция товара в системе 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-скрипта в этом случае ничего не нужно, код показан для информации. Администраторы сайта добавляют товары, а также опции товаров и их ценовое значение. После того как покупатель кладёт товар в корзину, цена так же будет пересчитываться в зависимости от выбранной им опции. Ценовая сетка так же предварительно проставляется при добавлении значений опций. Т.е. каждое значение опции может определять ценообразование товара.
На этом собственно всё, всем всего доброго!

Опубликован: 21.06.2019 г.

См. также:

Обращение к модели в контроллере OpenCart
Платёжные системы в OpenCart
Переключение OpenCart с HTTP на HTTPS
Сброс пароля администратора в OpenCart
Как в OpenCart очистить кэш?
Как установить модуль в OpenCart 2.x?
Как поменять статус заказа в OpenCart?
Отправка писем в OpenCart

Комментарии

  1. Сергей пишет:

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

    А как передать значение 229 если оно разное?

  2. htmaker пишет:

    Подставить значение переменной PHP проще простого

    var productData = {
    'product_id' : PRODUCT_IDS.CARD,
    'quantity': 1,
    'option': {
    '<?=$option_id?>': "Some option value"
    }
    };
  3. Егор пишет:

    А что такое PRODUCT_IDS.CARD ?
    У меня оно undefined

  4. htmaker пишет:

    Укажи ID текущего товара

Добавить комментарий для Сергей Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта