Добавление свойств в корзину нужно использовать, когда по какой-то причине функционала торговых предложений (SKU) недостаточно.
Как в битриксе добавить свойства товара в корзину и заказ
Рассмотрим, как это работает на примере самописного решения.
Add2BasketByProductID – в качестве одного из параметра принимает массив свойств, он то нам и нужен:
Add2BasketByProductID( $_REQUEST['id'], $_REQUEST['count'], $propArr );
Нас в данном коде интересует $propArr. В общем-то он имеет незамысловатую структуру в виде массива:
$propArr[] = array("NAME" => "Размер", "CODE" => "SIZE_CHECK", "VALUE" => $_REQUEST['size']);
Имя, код и значение – соответственно NAME, CODE, VALUE.
Полностью страница обработчик нашего AJAX будет иметь такой вид:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); if (CModule::IncludeModule("catalog")) { if ($_REQUEST['id'] && $_REQUEST['count']) { $propArr = array(); if (!empty($_REQUEST['size'])) { $propArr[] = array("NAME" => "Размер", "CODE" => "SIZE_CHECK", "VALUE" => $_REQUEST['size']); } Add2BasketByProductID( $_REQUEST['id'], $_REQUEST['count'], $propArr ); } }
Если $_REQUEST[‘size’] передан в запросе – добавляем свойство в корзину и оформление заказа.
Код на JS будет выглядеть так:
$(document).ready(function(){ $('.js-ajax-prop').on('click', function(){ let $id = $(this).data('id'), $count = $('#count').val(), $size = $('#size').val(); $.ajax({ url: '/include/ajax_cart.php', type: 'get', cache: false, data: { 'id': $id, 'count': $count, 'size': $size } }).done(function(data){ $('.column1inner').html(data); RSEC_BASKET_Refresh(); return false; }); return false; }); });
Битрикс позволяет подхватывать свойства товара передаваемые в заказ таким образом. Правда на стоимость товара это никак не влияет, лишь в качестве дополнительной информации. Данный функционал встречаю на сайтах, которые не используют логику SKU и торговых предложений, где 1 товар = 1 выбранной свойство (например, размер 42).