====== Оповещение пользователя о забытом товаре в корзине. 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