Пример для компонента "Детальная информация о заказе", что бы при повторе заказа товары не добавлялись к существующей корзине
В 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_REPEATT'] === '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/');
} |
Убрана проверка на авторизацию, так как она уже есть в самом компоненте и не нужные подключения классов- так как тоже уже подключены компонентом