Меню
RSS
Повторить заказ на API 1С-Битрикс наполнив корзину из заказа
 
Повторить заказ на API 1С-Битрикс наполнив корзину из заказа

Задача: заполнить корзину пользователя теми же товарами и количествами которые были в ранее созданном заказе. При этом нужно очистить корзину от товаров которые в ней уже имеются
 
Пример для компонента "Детальная информация о заказе", что бы при повторе заказа товары не добавлялись к существующей корзине

В template.php вместо кнопки повтора ставим форму:
Код
<form action="" method="post">
  <button type="submit" name="ORDER_REPEAT" value="Y">
      Повторить заказ
  </button>
</form>

В component_epilog.php (если нет-то создаем):
Код
php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
    die();
}

use Bitrix\Sale;
if ($_REQUEST['ORDER_REPEAT'] === 'Y') {
        // Очищаем корзину пользователя
        $basket = Sale\Basket::loadItemsForFUser(
            Sale\Fuser::getId(),
            Bitrix\Main\Context::getCurrent()->getSite()
        );
        foreach ($basket as $basketItem) {
            // Отложенные не трогаем
            if ($basketItem->getField('DELAY') === 'N') {
                // Удаляем запись
                $basket->getItemById($basketItem->getId())->delete();
                // Сохраняем корзину
                $basket->save();
            }
        }

        // Загружаем заказ
        $order = Sale\Order::load(
            $arResult['ID']
        );

        if ($order) {
            // Получаем корзину заказа
            $orderBasket = $order->getBasket();

            foreach ($orderBasket as $orderItem) {

                $productID = $orderItem->getProductId();
                $quantity = $orderItem->getQuantity();
                // Добавляем товар в корзину
                $basketItem = $basket->createItem(
                    'catalog',
                    $productID
                );
                // Дозаполняем
                $basketItem->setFields(array(
                    'QUANTITY' => $quantity,
                    'CURRENCY' => $order->getCurrency(),
                    'LID' => $order->getSiteId(),
                    'PRODUCT_PROVIDER_CLASS'=>'\CCatalogProductProvider',
                ));
            }
            $basket->save();
        }
        LocalRedirect('/personal/order/make/');
}

Убрана проверка на авторизацию, так как она уже есть в самом компоненте и не нужные подключения классов- так как тоже уже подключены компонентом
Изменено: Михаил Базаров - 11.01.2025 10:23:31
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

CAPTCHA с возможностью обновления без перезагрузки страницы в 1C-Битрикс

Задача: Так как стандартная капча в 1С-Битрикс, может отобразиться не удачно (символы уходят за грань капчи или не у...

Создание блога с комментариями, оценками и просмотрами на сайте с 1С-Битрикс

Если на вашем сайте требуется создание раздела с блогом или новостями, статьями. Записям в которых, посетители смогу ста...

Показ страницы сайта в боковом слайдере, на примере всплывающей формы обратной связи.

Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битриксе есть метод BX.SidePanel.In...

Запретить оплату с внутреннего счета, если в корзине есть определенный товар

Задача: пользователи могут оплачивать заказы с бонусного счета (штатный внутренний счет), но если в корзине ...

Отфильтровать товары бренда и вывести по разделам каталога

Задача: на странице бренда, который выводится компонентом новостей, нужно показать все товары этого бренда из каталога. ...

Если предложение SKU в корзине, поменять кнопку добавления на "В корзине"

Данная заметка является дополнением к ранее опубликованной: Если товар в корзине, поменять значение input на "В корзине"...

Обновление цен и остатков из текстового файла, в каталоге 1C-Битрикс.

Задача: прочитать txt-файл с ценами и остатками, который выгружает программа учета по FTP, и обновить эти данные в катал...

Обновление 1С-Битрикс с PHP 7, до поддержки версии PHP 8.3

Задача: обновить устаревший сайт на платформе 1С-Битрикс, который не получал обновлений уже более 4 лет и работает на PH...

Работа с HTTP-запросами в Bitrix: Обзор возможностей класса \Bitrix\Main\HttpRequest

Класс \Bitrix\Main\HttpRequest, является наследником класса Request, представляет собой мощный инструмент для работы с д...