====== Оповещение пользователя о забытом товаре в корзине. Cron======
1. Добавляем поле дата-время добавления товара в Siteusers - через phpmyadmin.
2. [[private:koding:hostcms:siteuser:nabljudateli:сorrect_isplay_of_fields|Добавляем наблюдателя для корректного отображения на форме редактирования]] Siteuser.
Создаем папку Kad в modules с путем Kad_Observers_Siteuser.
defined('HOSTCMS') || exit('HostCMS: access denied.');
class Kad_Observers_Siteuser
{
static public function OnBeforeExecute($object, $operation)
{
$oMainTab = $object->getTab('main');
$oMainTab->getField('datelastitem')->caption('Дата и время добавления последнего товара в корзину');
exit;
}
}
2.1. В конец файла bootstrap.php прописываем
Core_Event::attach('Siteuser_Controller_Edit.onBeforeExecute', array('Kad_Observers_Siteuser', 'OnBeforeExecute'));
3. В настройки ТДС корзины при добовлении товара в корзину дописываем код, который запишет в созднаное поле дату и время покупки
в код: if (Core_Array::getRequest('add'))
{
$shop_item_id = intval(Core_Array::getRequest('add'));
if ($shop_item_id)
{
//Вставтавляем код сохранения даты добавления в корзину.
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$oShop_Cart_Controller
->shop_item_id($shop_item_id)
->quantity(Core_Array::getRequest('count', 1))
->add();
}
Код сохранения даты добавления в корзину.
$oUser = Core_Entity::factory('Siteuser')->getCurrent();
$oUser->datelastitem = Core_Date::timestamp2sql(time());
$oUser->save();
4. Скрипт оповещение пользователя о забытом товаре.
/**
* Оповещение пользователя о забытом товаре
*
* @author Grinev Vadim, KAD Systems (©) 2016
* @date 12-09-2016
* Начало >>
*/
@set_time_limit(90000);
require_once(dirname(__FILE__) . '/../' . 'bootstrap.php');
define('CURRENT_SITE', 7);
// id документа для отправки письма пользователю
$firstIdDocument = 119;
$secondIdDocument = 118;
// Временные промежутки для отправки
$firstTimeMail = 12*60*60;
$secondTimeMail = 24*60*60;
$cronPeriod = 60*60;
// Текущий сайт
$oSite = Core_Entity::factory('Site', CURRENT_SITE);
$emailadm = Core_Entity::factory('Site', CURRENT_SITE)->admin_email;
$oShop = Core_Entity::factory('Shop', 25);
$oUsers = $oSite->Siteusers;
$oUsers->queryBuilder()
->where('datelastitem', '!=', '0000-00-00 00:00:00');
$aoUsers = $oUsers->findAll();
foreach ($aoUsers as $oUser)
{
// Проверяем наличие товаров у этого пользователя
$oShop_Cart_Controller = Shop_Cart_Controller::instance();
$aoShopCarts = $oShop_Cart_Controller->siteuser_id($oUser->id)->getAll($oShop);
if(count($aoShopCarts))
{
$email = $oUser->email;
$time = strtotime(date("Y-m-d H:i:s"))-strtotime($oUser->datelastitem);
if ($time >= $firstTimeMail and $time <= $firstTimeMail+$cronPeriod)
{
ob_start();
Kad::showDocument($firstIdDocument);
$message = ob_get_clean();
$subject = Core_Entity::factory('Document', $firstIdDocument)->name;
Core_Mail::instance()
->to($email)
->from($emailadm)
->subject($subject)
->message($message)
->contentType('text/html')
->send();
}
if ($time >= $secondTimeMail and $time <= $secondTimeMail+$cronPeriod)
{
ob_start();
Kad::showDocument($secondIdDocument);
$message = ob_get_clean();
$subject = Core_Entity::factory('Document', $secondIdDocument)->name;
Core_Mail::instance()
->to($email)
->from($emailadm)
->subject($subject)
->message($message)
->contentType('text/html')
->send();
$oUser->datelastitem = "";
$oUser->save();
}
}
else
{
$oUser->datelastitem = "";
$oUser->save();
}
}
/**
* << Конец
* @author Grinev Vadim, KAD Systems (©) 2016
* @date 12-09-2016
*/
5. [[private:administrirovanie_serverov:Cron|Устанавливаем скрипт в крон]] на выполнение каждый час
Страницу создал Вадим Гринев 13.09.16 в 10:36