use_linux

Рейтинг
68
Регистрация
04.08.2013
webinfo #:

Их не будет, этих вопросов, если номер будет 1023, например. Дураку понятно, что это общая нумерация в системе. Вы попробуйте что-то заказать в любом интернет-магазине, Вам придёт письмо типа "Ваш заказ №2389 сформирован и готов к отгрузке". Ни у кого вопросов не возникает

да нет, номера заказов здесь не причем)

webinfo #:

Какая разница, №1 или №3745? Пользователю пофиг.
Непонятно, чего Вы хотите добиться.

Чтобы вопросов таких не было: мол я только первый заказ делаю, а у меня пятая корзина откуда-то завелась. Это важно короче

webinfo #:

Заказ - это законченная процедура выбора. А корзина - это хотел заказать, но не заказал. Странно, что у ТС вообще возник этот вопрос. Самопис какой-то, наверное.

Это точно) Короче процедура такая: чувак кладет товар в корзину, у него есть вариант назвать ее как-то, если их будет несколько (это называется мультикорзина), или система по дефолту назначит сама. Должно получиться "корзина 1", "корзина 2", "корзина n"... Думаю как это проще сделать, чтобы имена корзин не повторялись, и чтобы для каждого пользователя нумерация была своя по порядку, а не корзина 2423...

SeVlad #:
Мне кажется речь про разные ж корзины одного юзера. Сегодня одна, завтра другая.

точно)

LEOnidUKG #:

В каком смысле разные? Чтобы они отличались от id пользователя? Просто смысл не совсем понятен. Ну пусть у всех называется Корзина просто если нет названия, зачем им добавлять цифру?

тут дело в том, что если юзер не захотел давать имя корзине, то по дефолту назначит скрипт, если по логике имя+id, то может получиться, что у пользователя первая корзина, а она называется корзина 3745 например. Не катит...

LEOnidUKG #:
Ну пусть хранятся... там же есть id порядковый у них. Если нет название то выводить Корзина + id пользователя

Хотя с другой сторона лучше бы порядковые номера разные давать

LEOnidUKG #:
Ну пусть хранятся... там же есть id порядковый у них. Если нет название то выводить Корзина + id пользователя

Вообще-то да. Так и сделаю. спс)

use_linux #:

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

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

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

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;
}
Всего: 79