Як не дивно, але в інтернет-магазині, кинуті кошики так само можуть завдати клопоту власникам магазину. Зараз мова піде про систему бітрікс, а конкретніше про покинутих кошиках користувачів. Як відомо кошика користувачів у базі даних, іншими словами, є таблиця, в якій створюються записи, в момент, коли ви кладете який-небудь товар у каталозі. У підсумку виходить, що записи в таблиці зростають по мірі існування інтернет магазину, і системою не видаляються зовсім. Було б непогано зробити так, щоб товари, які були покладені і забуті в кошику, віддалялися по закінченню, скажімо, одного дня.
На одному з форумів битрикса був знайдений код, який власне обходив усі записи кошиків користувачів, і знаходив ті, які пролежали більше доби, і замовлення не був оформлений. Такий скрипт зручно було запускати по періодично час від часу, що і навило мене на думку оформити його у вигляді агента.
Якщо ви не знайомі з агентами в системі бітрікс, то можна коротко розповісти про те, що це таке. Агентами в системі бітрікс називають функції або методи, які створені для виконання будь-яких завдань, за розкладом. За одне, ми подивимося простий приклад, як ми можемо створити свого агента в системі бітрікс.
Нашу функцію, яка буде займатися видаленням старих кошиків ми символічно назвемо 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)Query($strSql, false, “File: “.__FILE__.”
Line: “.__LINE__);
while ($ar_res = $db_res->Fetch()){
CSaleBasket::DeleteAll($ar_res[“ID”], false);
CSaleUser::Delete($ar_res[“ID”]);
}
}
return “deleteOldBaskets();”;
}
Зверніть увагу на один важливий момент, агенти в системі бітрікс повинні повертати ім’я функції, без цього запускатися агент не буде. Отже, після того як ми прописали функцію в скрипті init.php тепер необхідно в адміністраторській частини створити сам агент, і задати йому інтервал, з яким буде запускатися дана функція.
Переходимо на сторінку Налаштування > Налаштування продукту > Агенти
Тиснемо на кнопку «Додати агента», з’явитися форма:
Виставляємо дату першого запуску, прапорець активності, в полі «Функція агента» прописуємо ім’я функції, в нашому випадку це deleteOldBaskets();. Крім того виставляємо прапорець на полі «Періодичний», і виставляємо інтервал часу, через який агент буде запускатися.
Ви можете створювати свої функції для обробки даних за розкладом. Агенти в моєму випадку спрацьовують по крону, вам слід переконатися, як запускаються ваші агенти в системі.
Додав: htmaker, 28.02.2017 р.
(1 голосів, середній: 5,00 з 5)
Завантаження…
Діліться з друзями:
См. також:
Налаштування часу у VMBitrix
Рубрика: Bitrix, Linux
Використання highload-блоків в Bitrix
Рубрика: Bitrix
Як виконати SQL запит в Bitrix
Рубрика: Bitrix
Як підрахувати кількість елементів в Bitrix?
Рубрика: Bitrix
Динамічне масштабування зображень в Bitrix
Рубрика: Bitrix
Виключаємо користувача з ID=1 групи адміністраторів в Bitrix
Рубрика: Bitrix
Як скинути пароль адміністратора у Bitrix?
Рубрика: Bitrix
SQL-запити в бітрікс
Рубрика: Bitrix
Робота з параметрами модулів зберігаються в базі
Рубрика: Bitrix
Коментарі
28.04.2018 в 11:03
Доброго дня.
Як я розумію ця функція видаляє тільки кошика неавторизованих користувач? Але мені потрібно видалити всі кошики старше 3х місяців.
Якщо видалити з WHERE «o.ID is null » і «f.USER_ID is null » будуть видалятись всі поля?
Я працюю через инфоблоки, і якщо чесно насилу уявляю структуру БД Бітрікс.
Відповісти