Меню
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: заметки разработчика

Кнопка для отправки на печать карточки товара, без лишних данных

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

Добавление и удаление из сравнения на AJAX: Битрикс

Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил опубликовать. Скажу сразу, данно...

Фиксированная корзина с обновлением, без перезагрузки страницы.

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

Основные функции вывода в шаблонах Битрикс

Знаю, что все их знают. Но иногда не бывает лишним собрать все самое используемое в одну кучку. Ведь у каждого бывают мо...

Вывести товары в каталоге перебрав их по свойству и разделив на секции.

Задача: В каталоге, у товаров, есть свойство типа список с названием "Тип изделия" и кодом "TIP_IZDELIYA&...

Подключение jquery из ядра битрикс и объединение своих скриптов в один файл

Если используете большое количество js скриптов на сайте. Например: фансибокс, всяческие галереи и прочее- то таких внеш...

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

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

Вывести дату окончания скидки в карточке товара

Если нужно вывести информацию о скидке в карточке товара, можно воспользоваться методом CCatalogDiscount::GetList. Данны...

Почтовое событие на создание нового элемента инфоблока, через API

Иногда при разработке сайта требуется реализовать функционал добавления элементов инфоблока простыми пользователям.Будет...