This is an old revision of the document!
1. Добавляем поле дата-время добавления товара в Siteusers - через phpmyadmin.
2. Добавляем наблюдателя для корректного отображения на форме редактирования Siteuser cсоздаем папку 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. В настройки ТДС корзины при добовлении товара в корзину дописываем код, который запишет в созднаное поле дату и время покупки
$oUser = Core_Entity::factory('Siteuser')->getCurrent(); $oUser->datelastitem = Core_Date::timestamp2sql(time()); $oUser->save();
4. Скрипт оповещение пользователя о забытом товаре.
@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)) { 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(); } }
5. Устанавливаем скрипт в крон на выполнение каждый час Cron
# Выполнять задание раз в час в первую минуту часа.
1 */1 * * * /usr/bin/php -q /var/www/dev/public_html/cron/notification.php
/usr/bin/php - путь к интерпретатору PHP
/var/www/dev/public_html/cron/notification.php - путь к файлу который будет исполняться. Обратите внимание, при запуске из cron опция -q указывает PHP не выдавать http-заголовки.
Страницу создал Вадим Гринев 13.09.16 в 10:36