Отправка сообщения






Добро пожаловать!

Удаление «брошенных» корзин в системе Битрикс

Как не странно, но в интернет-магазине, брошенные корзины так же могут принести хлопот владельцам магазина. Сейчас речь пойдет о системе битрикс, а конкретнее о брошенных корзинах пользователей. Как известно корзины пользователей в базе данных, иными словами, есть таблица, в которой создаются записи, в момент, когда вы кладете какой-либо товар в каталоге. В итоге получается, что записи в таблице растут по мере существования интернет магазина, и системой не удаляются вовсе. Было бы неплохо сделать так, чтобы товары, которые были положены и забыты в корзине, удалялись по истечению, скажем, одного дня.

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

Если вы не знакомы с агентами в системе битрикс, то можно кратко рассказать о том, что это такое. Агентами в системе битрикс называют функции или методы, которые созданы для выполнения каких-либо задач, по расписанию. За одно, мы посмотрим простой пример, как мы можем создать своего агента в системе битрикс.

Нашу функцию, которая будет заниматься удалением старых корзин мы символически назовем 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();. Кроме того выставляем флажок на поле «Периодический», и выставляем интервал времени, через который агент будет запускаться.

Вы можете при необходимости создавать свои функции для обработки данных по расписанию. Агенты в моем случае срабатывают по крону, вам так же следует убедиться, в как запускаются ваши агенты в системе.

Добавил: htmaker, 28.02.2017 г.
 
плохослабосойдетхорошоотлично (Еще не оценили)
Загрузка...

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Комментарии

  • Загрузка...

Наверх