Александр Туниеков

Александр Туниеков

Был в сети 9 часов назад
Заказы принимаю
В плагине usertest сейчас
/*Адрес получателя нашего письма*/
		$teachers_email = explode(",",$teachers_email);
		foreach($teachers_email as $te){
			$modx->mail->address('to', trim($te));
		}
Можно вместо этого сделать примерно так:
switch($test['id']){
	case 1:
		$modx->mail->address('to', 'teacher1@mail.ru');
	break;
}
К сожалению, я чисто программист и подавать красиво не сильно умею :(. На практике, можно отправить отправку сообщения администратору. Что и сделано. Но в сообщении, можно, не только итоговый балл, как сейчас, отправлять но еще и отправить отчет со всеми ответами пользователя. Можно прикрутить счетчик пройденных тестов. Больше вариантов, пока, в голову не приходит :). Событие сделано чтоб программисты не лезя в основной код могли что угодно сделать по окончании сеанса тестирования. Мне в голову не приходит что еще можно, но Думаю что-нибудь оригинально придумают.
Похоже я понял в чем косяк. $modx внутри функции вызывается. А внутри функции его нет. Попробуйте перед if (is_email($user['email'])) { вставить global $modx;

->each(function($user, $idx) {
       global $modx;
	 if (is_email($user['email'])) {
           $queue_email = $modx->newObject('EmailQueueItem');
Поставил Cron Manager. Запустил такой код. И все успешно.
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);


if (!$EmailQueue = $modx->getService('emailqueue', 'EmailQueue', $modx->getOption('emailqueue_core_path', null,
	$modx->getOption('core_path') . 'components/emailqueue/') . 'model/emailqueue/', array())) {
	return;
}
$user['email'] = 'a@b.ru';
$queue_email = $modx->newObject('EmailQueueItem');
$data1 = array(
	'sender_package'=>'UsersSend', //дополнение отправитель письма
	'to'=>$user['email'], //емаил
	'from_name'=>'Тест',
	'subject'=>'Поздравляем с Днём рождения!', // тема письма
	'body'=>$modx->getChunk('email_ru', $user), // тело письма
	'date'=>date("Y-m-d H:i:s"), // дата в очереди. Нужно чтоб письма удалялись по истечении срока хранения.
);
$queue_email->fromArray($data1);
if(!$queue_email->save())
	$modx->log(1,"Письмо для ".$user['email']." не удалось добавить в очередь писем!");
Fatal error: Call to a member function getChunk() on a non-object
У вас в начале скрипта сам $modx подключен?
что то вроде такого
require_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/config.core.php';
require_once MODX_CORE_PATH . 'config/' . MODX_CONFIG_KEY . '.inc.php';
require_once MODX_CONNECTORS_PATH . 'index.php';
ошибку заметил
if (!$EmailQueue = $modx->getService('emailqueue', 'EmailQueue', $modx->getOption('emailqueue_core_path', null,
	$modx->getOption('core_path') . 'components/emailqueue/') . 'model/emailqueue/', array())) {
	return;
}
users()
    ->members('en')
    ->profile()
    ->where('modUser.active = 1 AND DAYOFMONTH(FROM_UNIXTIME(Profile.dob)) = DAYOFMONTH(now()) AND MONTH(FROM_UNIXTIME(Profile.dob)) = MONTH(now())')
    ->joinGroup('group2')
    ->each(function($user, $idx) {
        if (is_email($user['email'])) {
            	$queue_email->newObject('EmailQueueItem'); //забыл создать объект :(
		$data1 = array(
			'sender_package'=>'UsersSend', //дополнение отправитель письма
			'to'=>$user['email'], //емаил
			'subject'=>'Поздравляем с Днём рождения!', // тема письма
			'body'=>$modx->getChunk('chunkName', $user), // тело письма
			'date'=>date("Y-m-d H:i:s"), // дата в очереди. Нужно чтоб письма удалялись по истечении срока хранения.
		);
		$queue_email->fromArray($data1);
		if(!$queue_email->save())
			$modx->log(1,"Письмо для ".$user['email']." не удалось добавить в очередь писем!");
        }
    });
Примерно так думаю
if (!$EmailQueue = $modx->getService('emailqueue', 'EmailQueue', $modx->getOption('emailqueue_core_path', null,
	$modx->getOption('core_path') . 'components/emailqueue/') . 'model/emailqueue/', array())) {
	return;
}
users()
    ->members('en')
    ->profile()
    ->where('modUser.active = 1 AND DAYOFMONTH(FROM_UNIXTIME(Profile.dob)) = DAYOFMONTH(now()) AND MONTH(FROM_UNIXTIME(Profile.dob)) = MONTH(now())')
    ->joinGroup('group2')
    ->each(function($user, $idx) {
        if (is_email($user['email'])) {
            $data1 = array(
			'sender_package'=>'UsersSend', //дополнение отправитель письма
			'to'=>$user['email'], //емаил
			'subject'=>'Поздравляем с Днём рождения!', // тема письма
			'body'=>$modx->getChunk('chunkName', $user), // тело письма
			'date'=>date("Y-m-d H:i:s"), // дата в очереди. Нужно чтоб письма удалялись по истечении срока хранения.
		);
		$queue_email->fromArray($data1);
		if(!$queue_email->save())
			$modx->log(1,"Письмо для ".$user['email']." не удалось добавить в очередь писем!");
        }
    });
sender_package Нужно только чтоб видеть откуда письмо в очереди. Если вдруг несколько компонентов сразу отправляют. Можно написать что угодно или даже оставить пустым.
Ну тут идея компонента не совсем такая :). В очереди хранятся уже готовые письма. А письма в очередь добавляются кодом, в котором как раз письмо красиво и оформляется.
'body'=>$modx->getChunk('tpl.UserTest.InviteEmail',array('test_name' => $test->name,'link'=>$invite->url)),
Создание и редактирование писем в компоненте это просто на всякий случай. Чтоб протестировать компонент или просто отправку писем. Посмотреть что вообше в очереди лежит.
Кнопки Ошибки и Все — это не кнопки вообще. Это подписи что следующие кнопки к Ошибкам относяться и к всем письмам. Мда… замученный у меня дизайн получился. Буду выпадающим списком делать, но не пока занят через неделю думаю сделаю.
Хорошая идея. Только выпадающие списки я такие еще не делал. посмотрю как там в этом компоненте сделано.
Развития компонента пока не планируется :). В смысле, а есть куда его развивать? Рассылки все равно лучше делать через специализированные сервисы. Хостеры, если блокируют письма, то ничего не сообщают и не понятно ушло письмо или нет. Этот компонент на случай если сервис еще не имеет смысла подключать.
Хм… плохо у меня с дизайном :(. Воображения на картинки не хватает. Если есть идеи какие значки повешать на эти действия, напишите плиз :). Если писать словами, то в 1 слово не обойдешься и ширины экрана в итоге не хватит.
Это такая дата по умолчанию была. Так 0000-00-00 00:00:00 mysql записывает. Модераторы модсторе тоже сказали это поменять. В новой версии по умолчанию дата отправки null и в поле пусто. Сейчас обновил компонент на демо, чтоб вас это не смущало.