Их не будет, этих вопросов, если номер будет 1023, например. Дураку понятно, что это общая нумерация в системе. Вы попробуйте что-то заказать в любом интернет-магазине, Вам придёт письмо типа "Ваш заказ №2389 сформирован и готов к отгрузке". Ни у кого вопросов не возникает
да нет, номера заказов здесь не причем)
Какая разница, №1 или №3745? Пользователю пофиг.Непонятно, чего Вы хотите добиться.
Чтобы вопросов таких не было: мол я только первый заказ делаю, а у меня пятая корзина откуда-то завелась. Это важно короче
Заказ - это законченная процедура выбора. А корзина - это хотел заказать, но не заказал. Странно, что у ТС вообще возник этот вопрос. Самопис какой-то, наверное.
Это точно) Короче процедура такая: чувак кладет товар в корзину, у него есть вариант назвать ее как-то, если их будет несколько (это называется мультикорзина), или система по дефолту назначит сама. Должно получиться "корзина 1", "корзина 2", "корзина n"... Думаю как это проще сделать, чтобы имена корзин не повторялись, и чтобы для каждого пользователя нумерация была своя по порядку, а не корзина 2423...
точно)
В каком смысле разные? Чтобы они отличались от id пользователя? Просто смысл не совсем понятен. Ну пусть у всех называется Корзина просто если нет названия, зачем им добавлять цифру?
тут дело в том, что если юзер не захотел давать имя корзине, то по дефолту назначит скрипт, если по логике имя+id, то может получиться, что у пользователя первая корзина, а она называется корзина 3745 например. Не катит...
Хотя с другой сторона лучше бы порядковые номера разные давать
Вообще-то да. Так и сделаю. спс)
ну вот код, который отвечает за отправку данных на страницу
Сайт в офлайне, прямо сейчас не могу на тестовый сервак залить - он огромный.
Битрикс у всех разный. И архитектура здесь ни при чём, это решение, а не архитектура.
<?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;}