Как не странно, но в интернет-магазине, брошенные корзины так же могут принести хлопот владельцам магазина. Сейчас речь пойдет о системе битрикс, а конкретнее о брошенных корзинах пользователей. Как известно корзины пользователей в базе данных, иными словами, есть таблица, в которой создаются записи, в момент, когда вы кладете какой-либо товар в каталоге. В итоге получается, что записи в таблице растут по мере существования интернет магазина, и системой не удаляются вовсе. Было бы неплохо сделать так, чтобы товары, которые были положены и забыты в корзине, удалялись по истечению, скажем, одного дня.
На одном из форумов битрикса был найден код, который собственно обходил все записи корзин пользователей, и находил те, которые пролежали больше суток, и заказ не был оформлен. Такой скрипт удобно было запускать по периодически время от времени, что и навило меня на мысль оформить его в виде агента.
Если вы не знакомы с агентами в системе битрикс, то можно кратко рассказать о том, что это такое. Агентами в системе битрикс называют функции или методы, которые созданы для выполнения каких-либо задач, по расписанию. За одно, мы посмотрим простой пример, как мы можем создать своего агента в системе битрикс.
Нашу функцию, которая будет заниматься удалением старых корзин мы символически назовем deleteOldBaskets () и разместим её в файле /bitrix/php_interface/init.php.
function deleteOldBaskets(){ if ( CModule::IncludeModule("sale") && CModule::IncludeModule("catalog") ){ global $DB; $nDays = 1; // сроком старше одного дня $nDays = IntVal($nDays); $strSql = "SELECT f.ID ". "FROM b_sale_fuser f ". "LEFT JOIN b_sale_order o ON (o.USER_ID = f.USER_ID) ". "WHERE ". " TO_DAYS(f.DATE_UPDATE)<(TO_DAYS(NOW())-".$nDays.") ". " AND o.ID is null ". " AND f.USER_ID is null ". "LIMIT 3000"; $db_res = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__); while ($ar_res = $db_res->Fetch()){ CSaleBasket::DeleteAll($ar_res["ID"], false); CSaleUser::Delete($ar_res["ID"]); } } return "deleteOldBaskets();"; }
Обратите на один важный момент, агенты в системе битрикс должны возвращать имя функции, без этого запускаться агент не будет. Итак, после того как мы прописали функцию в скрипте init.php, теперь необходимо в администраторской части создать сам агент, и задать ему интервал, с которым будет запускаться данная функция.
Переходим на страницу: Настройки > Настройки продукта > Агенты
Жмем на кнопку «Добавить агента», появиться форма:
Выставляем дату первого запуска, флажок активности, в поле «Функция агента» прописываем имя функции, в нашем случае это deleteOldBaskets();. Кроме того выставляем флажок на поле «Периодический», и выставляем интервал времени, через который агент будет запускаться.
Вы можете при необходимости создавать свои функции для обработки данных по расписанию. Агенты в моем случае срабатывают по крону, вам так же следует убедиться, в как запускаются ваши агенты в системе.
Здравствуйте.
Как я понимаю данная функция удаляет только корзины неавторизированных пользователь? Но мне нужно удалить все корзины старше 3х месяцев.
Если удалить из WHERE "o.ID is null " и "f.USER_ID is null " то будут удалятся все поля?
Я работаю через инфоблоки, и если честно с трудом представляю структуру БД Битрикс.