Форум 1С-Битрикс

Задавайте свои вопросы и отвечайте на вопросы других участников форума


Как очистить брошенные корзины в битрикс

Напишите пожалуйста скрипт чтобы почистить брошенные корзины на сайте битрикс из раздела корзины. Накопилось очень много

Ответ 1

Есть у меня скриптик, писал для себя

 array(
           'FUSER_ID'
       ),
       'filter' => array(
           'ORDER_ID' => 'NULL',
           '<=DATE_INSERT' => $date
       ),
   )
);
while($bItem = $obBasket->Fetch()){
   
$arResult[] = $bItem;

CSaleBasket::DeleteAll(
       $bItem['FUSER_ID'],
       False
   );
}
print "
";print_r(count($arResult));print "
"; $num = $_REQUEST['num'] - 1; header("refresh: 3; url=https://site.ru/adev/15.php?num=".$num); ?>

Вставьте код приведенный выше в файл /adev/15.php на вашем сайте и запустите из браузера и будет вам счастье
Надеюсь все детали скрипта интуитивно понятны

Ответ 2

И куда его вставить?

Ответ 3

Понимаю твою проблему с "брошенными" корзинами, сам сталкивался с таким. В Битриксе штатная настройка "Сохранять корзину (дней)" часто не срабатывает как надо, и корзин накапливается очень много.
Есть несколько способов решения этой задачи через API 1С-Битрикс, не прибегая к прямым запросам в базу данных. Вот пример скрипта, который можно использовать:

Код

 array(
            'FUSER_ID'
        ),
        'filter' => array(
            'ORDER_ID' => 'NULL',
        ),
    )
);

while($bItem = $obBasket->Fetch()){
    CSaleBasket::DeleteAll(
        $bItem['FUSER_ID'],
        False
    );
}
?>

Этот скрипт получает все корзины, которые не привязаны к заказам (то есть брошенные), и удаляет их. Для удаления используется FUSER_ID – ID пользователя, владеющего корзиной.
Чтобы удалять только корзины старше определенного периода, можно добавить фильтр по дате:

Код

 array(
            'FUSER_ID'
        ),
        'filter' => array(
            'ORDER_ID' => 'NULL',
            '<=DATE_INSERT' => $date
        ),
    )
);

while($bItem = $obBasket->Fetch()){
    CSaleBasket::DeleteAll(
        $bItem['FUSER_ID'],
        False
    );
}
?>

В этом скрипте $date содержит дату, три месяца назад от текущей даты. В фильтре '<=DATE_INSERT' => $date указывается, что нужно выбирать корзины, у которых дата создания меньше или равна этой дате. Чтобы изменить период, поменяй число 90 на нужное количество дней.
Как говорил Джаред Гилмор, главное – не забывать делать бэкапы перед такими операциями!
Этот скрипт можно запускать вручную, либо настроить как консольный скрипт и запускать по расписанию через cron.
Ещё как вариант, можно попробовать использовать готовые решения или модули из Marketplace Битрикса, специально предназначенные для очистки брошенных корзин.

Возврат к списку