Меню
Повторить заказ на 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/');
}

Убрана проверка на авторизацию, так как она уже есть в самом компоненте и не нужные подключения классов- так как тоже уже подключены компонентом
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

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

Заполнение габаритов товара, после обмена с 1С, из свойств элемента инфоблока.

Если Ваш интернет-магазин интегрирован с 1С, скорее всего столкнулись с такой проблемой: 1С не умеет выгружать параметры...

Ссылка на товары бренда в каталоге с автоматическим применением умного фильтра

Задача: вывести товары на странице бренда, выведенного компонентом "Новости", с ссылками на разделы в каталоге...

Смена вида карточек товаров в catalog.section с иммитацией AJAX

Смену вида карточек товаров, в разделе каталога, можно реализовать с помощью сессии, записывая в нее нужный вида шаблона...

Список новостей с автопрокруткой через overflow:scroll

Простенький javascript позволит сделать автопрокрутку в шаблоне списка новостей. Достаточно актуально для новостных сайт...

Кастомизация компонента восстановления пароля bitrix:system.auth.forgotpasswd

Достаточно часто спрашивают как кастомизировать компонент восстановления пароля пользователя. Типовая задача, это измени...

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

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

Создание агента в 1С-Битрикс, на реальном примере

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

Открытие мобильного приложения Apache Cordova по ссылке

Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: при отправке ссылки на электоро...

Уникальная СЕО информация для каждого торгового предложения в каталоге 1С-Битрикс

Задача: реализовать уникальную мета-информацию для каждого SKU в каталоге. У каждого ТП должны быть свои: заголовок h1, ...