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

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

1. Добавляем поле дата-время добавления товара в Siteusers - через phpmyadmin.

2. Добавляем наблюдателя для корректного отображения на форме редактирования 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. Устанавливаем скрипт в крон на выполнение каждый час

Страницу создал Вадим Гринев 13.09.16 в 10:36

private/koding/hostcms/modules/shop/useful/notification_cron.txt · Last modified: 27.06.17 в 16:01 by maximzasorin_gmail.com