HREF.KZ

Блог о WEB-разработке и не только…

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

Просмотров: 2 110

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

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

  1. Аватар пользователя Сергей
    Сергей

    var productData = {
    ‘product_id’ : PRODUCT_IDS.CARD,
    ‘quantity’: 1,
    ‘option’: {
    ‘229’: «Some option value»
    }
    };

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

  2. Аватар пользователя htmaker
    htmaker

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

    var productData = {
    'product_id' : PRODUCT_IDS.CARD,
    'quantity': 1,
    'option': {
    '<?=$option_id?>': "Some option value"
    }
    };
  3. Аватар пользователя Егор
    Егор

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

  4. Аватар пользователя htmaker
    htmaker

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

Добавить комментарий

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