@Airslip

Как добавить в корзину деактивированый элемент?

Народ, помогите. Добавляю товары в корзину с помощью следующего кода:
if(!empty($_POST['ADD'])) {
    $itemID = intval($_POST['ADD']);
    CModule::IncludeModule("sale");
    CModule::IncludeModule("catalog");
    $count = 1;
    if(!empty($_POST['QUANTITY'])) {
        $count = $_POST['QUANTITY'];
    }
    Add2BasketByProductID($itemID, $count);
    echo json_encode(array(0=>$itemID));
}

Всё работает, но проблема в том, что если товар деактивирован в инфоблоке, то добавление не срабатывает. Ещё проблема в том, что если активный товар, добавленный в корзину, деактивировать то он пропадает из корзины. Как можно это исправить? Вообщем суть-нужно чтобы деактивированые товары всегда добавлялись в корзину и отображались в ней.
  • Вопрос задан
  • 681 просмотр
Пригласить эксперта
Ответы на вопрос 3
@flx12
срабатывают callback, нужно в Add2BasketByProductID 3 параметром передать
$arRewriteFields = array(
  'CALLBACK_FUNC'        => '',
  'ORDER_CALLBACK_FUNC'    => '',
  'CANCEL_CALLBACK_FUNC'     => '',
  'PAY_CALLBACK_FUNC'     => '',
  'PRODUCT_PROVIDER_CLASS'  => '',
);

но при такой раскладке не будет пересчитывать цена в корзине и проверка остатков в админке, если параметры в карточке изменились

или другой вариант, написать свой класс, который наследуется от PRODUCT_PROVIDER_CLASS (https://dev.1c-bitrix.ru/api_help/catalog/classes/... и указать его в $arRewriteFields['PRODUCT_PROVIDER_CLASS']
Ответ написан
Комментировать
@Airslip Автор вопроса
Я вставил 3й параметр и больше никакой товар не хочет добавляться в корзину.
if(!empty($_POST['ADD'])) {
    $itemID = intval($_POST['ADD']);
    CModule::IncludeModule("sale");
    CModule::IncludeModule("catalog");
    $count = 1;
    if(!empty($_POST['QUANTITY'])) {
        $count = $_POST['QUANTITY'];
    }
	$arRewriteFields = array(
	  'CALLBACK_FUNC'        => '',
	  'ORDER_CALLBACK_FUNC'    => '',
	  'CANCEL_CALLBACK_FUNC'     => '',
	  'PAY_CALLBACK_FUNC'     => '',
	  'PRODUCT_PROVIDER_CLASS'  => '',
	);
    Add2BasketByProductID($itemID, $count, $arRewriteFields);
    echo json_encode(array(0=>$itemID));
}
Ответ написан
@kutepovea
Программист 1C-Bitrix и 1С:Предприятие
Не знаю на сколько актуален ответ, но дам скорее совет - внутренние манипуляции не должны ломать механизмы битрикса.
Если вам нужно спрятать товар с глаз долой но оставить возможность добавлять в корзину, то создайте в глобальной переменной $arrFilter в init.php фильтр с каким-то свойством товара.
Активность используется в большом количестве механизмов. И к тому же ваш подход усложняет дальнейшую поддерку сайта
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы