не обновляются данные корзины в bitrix

12
UL
На сайте с 04.08.2013
Offline
68
598
В чекбоксах, если отметить товар цены, вес обновляются, а бонусы - нет. Подскажите в чем потенциально может быть проблема. JS в порядке, где-то в пхп баг закрался.
W1
На сайте с 22.01.2021
Offline
306
#1
use_linux :
В чекбоксах, если отметить товар цены, вес обновляются, а бонусы - нет. Подскажите в чем потенциально может быть проблема. JS в порядке, где-то в пхп баг закрался.

Лично я вообще ничего не понял. Боюсь, что и другие тоже.

Мой форум - https://webinfo.guru –Там я всегда на связи
UL
На сайте с 04.08.2013
Offline
68
#2
webinfo #:

Лично я вообще ничего не понял. Боюсь, что и другие тоже

UL
На сайте с 04.08.2013
Offline
68
#3
webinfo #:

Лично я вообще ничего не понял. Боюсь, что и другие тоже.

Кол-во бонусов не реагирует на чекбоксы. Уже весь этот битрикс прошмонал

LEOnidUKG
На сайте с 25.11.2006
Offline
1747
#4

А адрес сайта, большо-большой секрет?

где-то в пхп баг закрался.

И что мы должны сделать? Интуитивно исправлять PHP баги без его самого?
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
W1
На сайте с 22.01.2021
Offline
306
#5
use_linux #:
Кол-во бонусов не реагирует на чекбоксы

А может быть, оно от общего количества зависит, которое тоже не меняется.  Смотреть надо, как эта строка формируется.

UL
На сайте с 04.08.2013
Offline
68
#6
LEOnidUKG #:

А адрес сайта, большо-большой секрет?

И что мы должны сделать? Интуитивно исправлять PHP баги без его самого?

Думаю, что зная архитектуру битрикса подскажут куда копать. Ну, да ладно...

W1
На сайте с 22.01.2021
Offline
306
#7
use_linux #:
зная архитектуру битрикса

Битрикс у всех разный. И архитектура здесь ни при чём, это решение, а не архитектура.

UL
На сайте с 04.08.2013
Offline
68
#8
webinfo #:

Битрикс у всех разный. И архитектура здесь ни при чём, это решение, а не архитектура.

<?

define("ADMIN_SECTION", false);
define('STOP_STATISTICS', true);
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

//подготавливаем обьект для работы с get и post
$context = \Bitrix\Main\Application::getInstance()->getContext();
$request = $context->getRequest();

if (empty($request->toArray())) {
    $APPLICATION->RestartBuffer();
    echo \Bitrix\Main\Web\Json::encode(array(
        "status" => "0",
        "errorCode" => 201,
        "errorMessage" => "Пустые параметры запроса"
    ));
    die();
}

\Bitrix\Sale\Compatible\DiscountCompatibility::stopUsageCompatible(); //Отключает режим работы с старым ядром Bitrix
//идентифицируем пользователя для работы с карзиной
$fuser = Bitrix\Sale\Fuser::getId();

global $USER;
//Мультикорзина
\Bitrix\Main\Loader::IncludeModule("innst.optuserlk");

$basket_sid = Bitrix\Main\Context::getCurrent()->getSite(); //сид корзины по умолчанию равен ид сайта

if (!empty($USER->getId())) {
    $multibasket = new Innst\OptUserLk\MultiBasket(CUser::GetByID($USER->getId())->Fetch());
    if (!empty($multibasket->chekUserGroup($USER->getId()))) {
        $arActiveBasket = $multibasket->getActiveBasket();
        if (!empty($arActiveBasket['SID'])) {
            $basket_sid = $arActiveBasket['SID'];
        }
    }
}
//Конец - мультикорзина
/* получаем текущую корзину пользака */
$basket = Bitrix\Sale\Basket::loadItemsForFUser($fuser, $basket_sid);

if ($request["basSmall"] == 'getcount') {
    $APPLICATION->RestartBuffer();
    echo \Bitrix\Main\Web\Json::encode(array(
        "status" => "1",
        "count" => $basket->count(),
    ));
    die();
}



// проверяем пришел ли идентификатор корзины
if (is_array($request["basketId"])) {
    $basketId = array_map('intval', $request["basketId"]);
} else {
    $basketId = intval($request["basketId"]); //Старый режим
}


if (empty($basketId)) {//Теперь $basketId
    $APPLICATION->RestartBuffer();
    echo \Bitrix\Main\Web\Json::encode(array(
        "status" => "0",
        "errorCode" => 201,
        "errorMessage" => "Отсутствует элемент корзины"
    ));
    die();
}





//if (!empty($basketItemEdit)) {
//редактируем количество товара
if ($request["basSmall"] == 'edit') {//Редактирование товара
    $basketItemEdit = $basket->getItemById($basketId);
//проверяем колличество
    $quantity = intval($request["quantity"]);
    if (empty($quantity)) {
        $quantity = 1;
    }

//обновляем количество товара
    $basketItemEdit->setField("QUANTITY", $quantity);

//сохраняем корзину
    $basket->save();

//получаем список содержимого
    $basketItems = $basket->getOrderableItems();

    $arElement = getElementProduct($basketItemEdit->getProductId());

    $weight = null;

    if ($arElement['WEIGHT']) {
        $weight = floatval($arElement['WEIGHT']) * $basketItemEdit->getQuantity();
    }
//отправляем удачный ответ
    $APPLICATION->RestartBuffer();
    echo \Bitrix\Main\Web\Json::encode(array(
        "status" => "1",
        "product" => array(
            "basketId" => $basketItemEdit->getId(),
            "quantity" => $basketItemEdit->getQuantity(),
            //"summ" => $basketItemEdit->getFinalPrice(),//Сумма с учётом скидок
            "summ" => Bitrix\Sale\PriceMaths::roundPrecision($basketItemEdit->getPrice() * $basketItemEdit->getQuantity()), //Сумма
            "discount" => floor($basketItemEdit->getDiscountPrice()),
            "weight" => $weight
        ),
        "allSumm" => $basket->getPrice(),
        "allQuantity" => array_sum($basketItems->getQuantityList())
    ));
    die();
} elseif ($request["basSmall"] == 'delete') {
    $basketItemEdit = $basket->getItemById($basketId);
//удаляем элемент корзины
    if ($basketItemEdit->delete()) {

//сохраняем корзину
        $basket->save();

//получаем список содержимого
        $basketItems = $basket->getOrderableItems();

//отправляем удачный ответ
        $APPLICATION->RestartBuffer();
        echo \Bitrix\Main\Web\Json::encode(array(
            "status" => "1",
            "count" => $basket->count(),
            "product" => array(
                "basketId" => $basketId,
            ),
            "allSumm" => $basketItems->getPrice(),
            "allQuantity" => array_sum($basketItems->getQuantityList())
        ));
        die();
    }

//ответ об ошибке
    $APPLICATION->RestartBuffer();
    echo \Bitrix\Main\Web\Json::encode(array(
        "status" => "0",
        "errorCode" => 205,
        "errorMessage" => "Ошибка удаления эллемента"
    ));
    die();
} elseif ($request["basSmall"] == 'delay') {//отложить или не отложить
//        $delay_value = boolval($request["delay_value"]);
    if (is_array($basketId)) {

        $basketItemEdit = null;

        foreach ($basketId as $item_id) {

            $basketItemEdit = $basket->getItemById($item_id);

            if (is_object($basketItemEdit)) {
                $delay_value = $basketItemEdit->isDelay(); //По принципу переключения на обратный от текущего

                $basketItemEdit->setField("DELAY", ($delay_value ? 'N' : 'Y'));
            }
        }
    } else {

        $basketItemEdit = $basket->getItemById($basketId);

        $delay_value = $basketItemEdit->isDelay(); //По принципу переключения на обратный от текущего

        $basketItemEdit->setField("DELAY", ($delay_value ? 'N' : 'Y'));
    }



//сохраняем корзину
    $basket->save();

    $inorder = 0; //в заказе

    $indelay = 0; //Отложенн

    $summ_inorder = 0; //Сумма выбранных для заказа

    $basketItems = $basket->getBasketItems();

    foreach ($basketItems as $item) {
        $item_sum = ($item->getPrice() * $item->getQuantity());
        if ($item->isDelay()) {
            $indelay++;
        } else {
            $inorder++;
            $summ_inorder += $item_sum;
        }
    }


    $APPLICATION->RestartBuffer();

    echo \Bitrix\Main\Web\Json::encode(array(
        "status" => "1",
        "count" => $basket->count(),
        "product" => array(
            "basketId" => $basketId,
        ),
        'inorder' => $inorder,
        'indelay' => $indelay,
        'summ_inorder' => number_format($summ_inorder, 0, '', ' ') . ' р.',
    ));
    die();
}
//} else {
////ответ об ошибке, элемента корзины либо нет, либо он принадлежит другому пользаку
//    $APPLICATION->RestartBuffer();
//    echo \Bitrix\Main\Web\Json::encode(array(
//        "status" => "0",
//        "errorCode" => 202,
//        "errorMessage" => "Элемент корзины не найден"
//    ));
//    die();
//}
//ошибка, если неодно условие операции не совпало
$APPLICATION->RestartBuffer();
echo \Bitrix\Main\Web\Json::encode(array(
    "status" => "0",
    "errorCode" => 100,
    "errorMessage" => "Ошибка операции"
));
die();

function getElementProduct($product_id) {

    $arResult = [];

    if (!CModule::IncludeModule('catalog') && intval($product_id) < 1) {
        return $arResult;
    }

    $arResult = \CCatalogProduct::GetByID($product_id);

    return $arResult;
}
UL
На сайте с 04.08.2013
Offline
68
#9

ну вот код, который отвечает за отправку данных на страницу

UL
На сайте с 04.08.2013
Offline
68
#10
use_linux #:

ну вот код, который отвечает за отправку данных на страницу

Сайт в офлайне, прямо сейчас не могу  на тестовый сервак залить - он огромный.

12

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