Як не дивно, але в інтернет-магазині, кинуті кошики так само можуть завдати клопоту власникам магазину. Зараз мова піде про систему бітрікс, а конкретніше про покинутих кошиках користувачів. Як відомо кошика користувачів у базі даних, іншими словами, є таблиця, в якій створюються записи, в момент, коли ви кладете який-небудь товар у каталозі. У підсумку виходить, що записи в таблиці зростають по мірі існування інтернет магазину, і системою не видаляються зовсім. Було б непогано зробити так, щоб товари, які були покладені і забуті в кошику, віддалялися по закінченню, скажімо, одного дня.

На одному з форумів битрикса був знайдений код, який власне обходив усі записи кошиків користувачів, і знаходив ті, які пролежали більше доби, і замовлення не був оформлений. Такий скрипт зручно було запускати по періодично час від часу, що і навило мене на думку оформити його у вигляді агента.

Якщо ви не знайомі з агентами в системі бітрікс, то можна коротко розповісти про те, що це таке. Агентами в системі бітрікс називають функції або методи, які створені для виконання будь-яких завдань, за розкладом. За одне, ми подивимося простий приклад, як ми можемо створити свого агента в системі бітрікс.

Нашу функцію, яка буде займатися видаленням старих кошиків ми символічно назвемо 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 » будуть видалятись всі поля?
    Я працюю через инфоблоки, і якщо чесно насилу уявляю структуру БД Бітрікс.

    Відповісти