This is an old revision of the document!
1. Добавляем поле в Siteusers /через phpmyadmin. 2. Добавляем наблюдателя для корректного отображения на форме редактирования Siteuser cсоздаем папку в modules с путем Rusakovo_Observers_Siteuser.
defined('HOSTCMS') || exit('HostCMS: access denied.'); class Rusakovo_Observers_Siteuser { static public function OnBeforeExecute($object, $operation) { $oMainTab = $object->getTab('main'); $oMainTab->getField('datelastitem')->caption('Дата и время добавления последнего товара в корзину'); exit; } }
2.1. В конец файла bootstrap.php прописываем
Core_Event::attach('List_Item_Controller_Edit.onBeforeExecute', array('Kadseofilter_Observers_List', 'ListItemOnBeforeExecute'));
3. В настройки ТДС при добовлении товара в корзине дописываем код который запишет в созднаное поле дату и время покупки
$oUser = Core_Entity::factory('Siteuser')->getCurrent(); $oUser->datelastitem = Core_Date::timestamp2sql(time()); $oUser->save();
4. Сбрасываем дату и время покупки при оформлении заказа в коде на последнем шаге в конец добавить
$oUser = Core_Entity::factory('Siteuser')->getCurrent(); $oUser->datelastitem = ''; $oUser->save();
5. Пишем скрипт.
5.1 Проверяем наличие товаров у этого пользователя.
5.2 Получаем пользователей у которых созданное поле с датой ваременем отличное от текущего более чем от 12-13 часов.
5.3 Отправляем письмо о забытых товарах.
5.4 Получаем пользователей у которых созданное поле с датой ваременем отличное от текущего более чем на 24-25 часов.
5.5 Отправляем письмо о забытых товарах.
5.6 Сбрасываем значение для этих пользователей.
@set_time_limit(90000); require_once(dirname(__FILE__) . '/../' . 'bootstrap.php'); define('CURRENT_SITE', 7); // Временные промежутки для отправки $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) { $subject = 'Вы добавили товар в корзине на http://rusakovo.ru/'; $message_mail = 'Вы добавили товар в корзине 12 часов назад http://rusakovo.ru/'; Core_Mail::instance() ->to($email) ->from($emailadm) ->subject($subject) ->message($message_mail) ->contentType('text/plain') ->send(); } if ($time > $secondTimeMail and $time < $secondTimeMail+$cronPeriod) { $subject = 'Вы добавили товар в корзине на http://rusakovo.ru/'; $message_mail = 'Вы добавили товар в корзине 24 часов назад http://rusakovo.ru/'; Core_Mail::instance() ->to($email) ->from($emailadm) ->subject($subject) ->message($message_mail) ->contentType('text/plain') ->send(); $oUser->datelastitem = ""; $oUser->save(); } } else { $oUser->datelastitem = ""; $oUser->save(); } }
6. Скачиваем PuTTy и заходим в нее.
6.1. Cron (Command Run ON) — система для автоматического запуска программ и скриптов на сервере в определённое время. Управлять 'cron' нужно с помощью команды 'crontab'. Команда 'crontab -e' автоматически запустит текстовый редактор и загрузит в него файл конфигурации cron. После выхода из редактора, новая конфигурация cron будет установлена (вступит в силу) автоматически. Пустые строки и строки, начинающиеся с символа '#' игнорируются. Остальные строки являются установками переменных окружения и командами cron. Запись crontab- файла в общем случае состоит из семи полей: минуты часы день месяц день_недели имя_пользователя команда Пример: # Выполнять задание раз в час в 1 минут
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