/
bitrix-dev
/
Starter-kit
Обзор
Документация
Войти
/
bitrix-dev
/
Starter-kit
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
main
local/ajax/basket.php
141 строка
5 KB
Alexey Karizhenskiy
Первая сборка (из ранее используемого)
19 янв 2026, 21:00
19 янв 2026, 21:00
d843e36
Код
Авторство
О чём код?
<?php require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); use Bitrix\Main\Application; use Bitrix\Main\Web\Json; use MWI\Basket; $response = [ 'success' => false ]; $request = Application::getInstance()->getContext()->getRequest(); $action = $request->getPost('action') ?: $request->get('action'); switch ($action) { case 'get': $response['success'] = true; $response['items'] = Basket::getProductIds(); $response['count'] = Basket::getCount(); break; case 'increase': $productId = intval($request->getPost('productId')); $basketItemId = intval($request->getPost('basketItemId')); if ($productId > 0 || $basketItemId > 0) { $response['success'] = Basket::increaseQuantity($productId, $basketItemId ?: null); $response['count'] = Basket::getCount(); } break; case 'decrease': $productId = intval($request->getPost('productId')); $basketItemId = intval($request->getPost('basketItemId')); if ($productId > 0 || $basketItemId > 0) { $response['success'] = Basket::decreaseQuantity($productId, $basketItemId ?: null); $response['count'] = Basket::getCount(); } break; case 'set': $productId = intval($request->getPost('productId')); $quantity = floatval($request->getPost('quantity')); $basketItemId = intval($request->getPost('basketItemId')); if ($productId > 0 || $basketItemId > 0) { $response['success'] = Basket::setQuantity($productId, $quantity, $basketItemId ?: null); $response['count'] = Basket::getCount(); } break; case 'remove': $productId = intval($request->getPost('productId')); $basketItemId = intval($request->getPost('basketItemId')); if ($productId > 0 || $basketItemId > 0) { $response['success'] = Basket::remove($productId, $basketItemId ?: null); $response['count'] = Basket::getCount(); } break; case 'clear': $response['success'] = Basket::clear(); $response['count'] = 0; break; case 'ADD2BASKET': $productId = intval($request->get('id')); $quantity = floatval($request->get('quantity')); // Проверяем корректность ID товара if ($productId <= 0) { $response['success'] = false; $response['STATUS'] = 'ERROR'; $response['MESSAGE'] = 'Некорректный ID товара'; break; } // Проверяем существование товара if (!\CIBlockElement::GetByID($productId)->Fetch()) { $response['success'] = false; $response['STATUS'] = 'ERROR'; $response['MESSAGE'] = 'Товар не найден'; break; } if ($quantity <= 0) { $ratioIterator = \CCatalogMeasureRatio::getList( array(), array('PRODUCT_ID' => $productId), false, false, array('PRODUCT_ID', 'RATIO') ); if ($ratio = $ratioIterator->Fetch()) { $intRatio = (int)$ratio['RATIO']; $floatRatio = (float)$ratio['RATIO']; $quantity = $floatRatio > $intRatio ? $floatRatio : $intRatio; } } if ($quantity <= 0) { $quantity = 1; } $props = []; // Получаем свойства из POST $basketProps = base64_decode($request->getPost('basket_props')); if ($basketProps) { $propCodes = @unserialize($basketProps); if ($propCodes !== false) { foreach ($propCodes as $propCode) { $propValue = $request->getPost($propCode); if ($propValue) { $props[] = [ 'NAME' => $propCode, 'CODE' => $propCode, 'VALUE' => $propValue ]; } } } } [$successfulAdd, $errorMsg] = Basket::add($productId, $quantity, $props); $response['success'] = $successfulAdd; if ($successfulAdd) { $response['STATUS'] = 'OK'; $response['MESSAGE'] = 'Товар успешно добавлен в корзину'; } else { if (strpos($errorMsg, 'Можно добавить не более') !== false) { $errorMsg = 'Вы выбрали максимальное количество товара для заказа'; } $response['STATUS'] = 'ERROR'; $response['MESSAGE'] = $errorMsg ?: 'Ошибка при добавлении товара в корзину'; } break; } echo Json::encode($response);