private:koding:hostcms:modules:shop:useful:notification_cron

This is an old revision of the document!


Оповещение пользователя о забытом товаре в корзине. Cron

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)
			{
			ob_start();
			Kad::showDocument(118);
			$message = ob_get_clean();
                	$subject = Core_Entity::factory('Document', 119)->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(119);
			$message = ob_get_clean();
                  	$subject = Core_Entity::factory('Document', 119)->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();	
		}
}

6. Скачиваем PuTTy и заходим в него.

6.1. Cron (Command Run ON) — система для автоматического запуска программ и скриптов на сервере в определённое время. Управлять 'cron' нужно с помощью команды 'crontab'. Команда 'crontab -e' автоматически запустит текстовый редактор и загрузит в него файл конфигурации cron. После выхода из редактора, новая конфигурация cron будет установлена (вступит в силу) автоматически. Пустые строки и строки, начинающиеся с символа '#' игнорируются. Остальные строки являются установками переменных окружения и командами cron. Запись crontab- файла в общем случае состоит из семи полей: минуты часы день месяц день_недели имя_пользователя команда

Пример:

# Выполнять задание раз в час в первую минуту часа.

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

private/koding/hostcms/modules/shop/useful/notification_cron.1473760092.txt.gz · Last modified: 13.09.16 в 12:48 by gva4894_gmail.com