Не дать пользователю купить больше одного товара, в Битрикс

Внимание! Все сообщения на форуме проходят модерацию. Ваше сообщение появится после проверки.
Не дать пользователю купить больше одного товара, в Битрикс

Иногда нужно и такое: Например: на одном из разрабатываемых сайтов, мне нужно было создать всего 4 товара. при этом покупателю не доступна возможность купить два товара, только один. Но у него должна остаться возможность "передумать".
Тоже самое на D7
Код
use Bitrix\Sale\Fuser;

// Если параметр basket_updated=Y присутствует - значит корзина уже была обработана
$isAfterRedirect = isset($_GET['basket_updated']) && $_GET['basket_updated'] === 'Y';

// Выполняем операции только при первой загрузке страницы (не после редиректа)
if (!$isAfterRedirect) {

    // Получаем ID текущего пользователя корзины (FUser)
    $fUserId = Fuser::getId();

    // Получаем корзину текущего пользователя для текущего сайта
    $basket = Basket::loadItemsForFUser($fUserId, SITE_ID);

    // Получаем коллекцию товаров в корзине
    $basketItems = $basket->getBasketItems();

    // Подсчитываем количество товаров в корзине
    $basketCount = count($basketItems);

    // Выполняем операции только если в корзине больше одного товара
    // Если товар один - ничего не делаем
    if ($basketCount > 1) {

        // Запоминаем ID последнего товара
        $lastProductId = null;

        // Перебираем все товары и запоминаем ID последнего
        foreach ($basketItems as $basketItem) {
            $lastProductId = $basketItem->getProductId(); // Каждая итерация перезаписывает - в итоге останется последний
        }

        // Если нашли последний товар
        if ($lastProductId) {

            // Удаляем все товары из корзины
            foreach ($basketItems as $basketItem) {
                $basketItem->delete();
            }

            // Сохраняем изменения (применяем удаление)
            $basket->save();

            // Создаём новую корзину для добавления товара
            $basket = Basket::loadItemsForFUser($fUserId, SITE_ID);

            // Добавляем последний товар обратно в корзину
            $item = $basket->createItem('catalog', $lastProductId);
            $item->setFields([
                'QUANTITY' => 1, // Количество = 1 шт
                'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(), // Базовая валюта
                'LID' => SITE_ID, // ID сайта
                'PRODUCT_PROVIDER_CLASS' => '\CCatalogProductProvider', // Провайдер товара
            ]);

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

            // Формируем URL с GET-параметром для предотвращения повторной обработки
            // Этот параметр говорит скрипту, что корзина уже была обработана
            $redirectUrl = $APPLICATION->GetCurPage() . '?basket_updated=Y';

            // Делаем перезагрузку страницы для обновления интерфейса корзины
            // После перезагрузки скрипт увидит параметр basket_updated=Y и не будет выполняться
            LocalRedirect($redirectUrl);
        }
    }
}
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 100 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 500 000 руб. от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 350 000 руб. от 1-го месяца

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфресурс

от 400 000 руб. от 5-ти недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Лечение сайтов от вирусов

от 40 000 руб. от 2-х дней

Выполню полную проверку сайта и окружения. В случае обнаружения вирусов проведу полный комплекс лечения проекта и закрытия лазеек.