Разработка сайта на Yii с нуля. Урок 6. Автоматич. отправка оповещений об одобренных комментариях на email автора комментария

Разработка сайта на Yii с нуля. Урок 6. Автоматич. отправка оповещений об одобренных комментариях на email автора комментария Сегодня добавим в Yiico автоматическую отправку оповещения автору комментария, о том, что его комментарий одобрен.

Видео:

 

1. Выведем в форму редактирования комментария поле Статус, чтобы получить возможность вручную устанавливать его значение в "Ожидает модерации". Это очень понадобится при тестировании отправки оповещений на email (чтобы не пложить уйму комментов новых, мы будем обходиться одним).

2. В модели Comment при одобрении модератором комментария (нажатие на ссылку approve) сработает действие approve(). Сюда и добавим событие для оповещения. Создадим экземпляр класса потомка CEvent - а именно, класс события ApproveCommentEvent

/**
* Approves a comment.
*/
public function approve()
{
$this->status=Comment::STATUS_APPROVED;
$this->update(array('status')); 

//создаём экземпляр потомка CEvent
$event = new ApproveCommentEvent($this);
$event->comment = $this;
// вызываем событие
$this->onApproveComment($event);
} 

Ниже здесь же в модели создаём функцию onApproveComment, чтобы дальше мы смогли писать onApproveComment вместо raiseEvent.

// описываем событие onApproveComment
public function onApproveComment($event) {
// Событие реально то пробуждается здесь, так как непосредственно вызывать событие принято в его описании. Так мы можем использовать метод onNewComment вместо raiseEvent
$this->raiseEvent('onApproveComment', $event);
}  

3. Описываем класс-оповещатель Notifier в protected/components и класс ApproveCommentEvent

<?php
// Класс-оповещатель, рассылает почту при различных событиях
class Notifier {
function comment($event){
// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= "From: Yiico <".Yii::app()->params['adminEmail'].">\r\nReply-To: ".Yii::app()->params['adminEmail'];
$text = "Ваш комментарий на Yiico одобрен модератором.<br />
<blockquote>
Комментарий: <b>{$event->comment->content}</b><br />
Автор: <b>{$event->comment->author}</b><br />
Email: <b>{$event->comment->email}</b><br />
Url: <b>{$event->comment->url}</b><br />

Вы можете комментарий <a href=\"".Yii::app()->request->getBaseUrl(true)."{$event->comment->url}\">{$event->comment->url}</a><br /><br />
Best Regards, Yiico<br />
";
mail($event->comment->email,'Ваш комментарий на Yiico',$text,$headers);
//$material = $event->sender;
//foreach($material->comments as $comment){
// if($comment->notify === "1") mail($comment->email, 'Новый комментарий на сайте yiico', $text,$headers);
//}
}
}     

4. В контроллере CommentController назначаем оповещателя обработчиком в действие actionApprove()

$notifier = new Notifier();
// добавляем обработчик события
$comment->onApproveComment = array($notifier, 'comment'); // ф-ция comment из компонента Notifier

$comment->approve();

Теперь при вызове $comment->approve() выполняется и метод $notifier->comment.

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:
  1. 14 Разработка приложения на Yii. Урок 14: Выводим список категорий как новый виджет на сайте (29.04.2015) free
  2. 13 Разработка приложения на Yii. Урок 13: Внедряем категории для статей. (29.04.2015) free
  3. 12 Разработка приложения на Yii. Урок 12: Профилирование приложения, включаем кеширование. (20.01.2015)
  4. 11 Yiico. Видеокурс по разработке сайта на Yii. Урок 11: Отладка приложения, включаем журналирование. (20.01.2015)
  5. 10 Yiico. Видеокурс по разработке сайта на Yii. Урок 10: Если ваше приложение находится не в корневой папке, а во вложенной. (19.10.2014) free
  6. 9 Разработка сайта на Yii с нуля. Урок 9. Выборка статей определённого автора. (13.08.2014) free
  7. 8 Разработка сайта на Yii с нуля. Урок 8. Вызов в моделях функции, общей для них. Как избегать дублирования кода? (25.07.2014) free
  8. 7 Разработка сайта на Yii с нуля. Урок 7. Изменение количества выводимых записей на странице в CGridView. Включаем сессии Yii. (04.09.2013) free
  9. 6 Разработка сайта на Yii с нуля. Урок 6. Автоматич. отправка оповещений об одобренных комментариях на email автора комментария (11.08.2013) ← вы тут free
  10. 5 Разработка сайта на Yii с нуля. Урок 5. Переименовываем blog в yiico. Изменяем "Home" в breadcrumbs. Включаем Gzip-сжатие. (09.08.2013) free
  11. 4 Курс по Yii с нуля. Урок 4. Дорабатываем простую работу с пользователями: хранение пароля при редактировании пользователя. (13.04.2013) free
  12. 3 Курс по Yii с нуля. Урок 3. Создаём новых пользователей. Организуем простую систему авторизации. Аутентификация, пароли, соли. (20.07.2014) free
  13. 2 Курс по Yii с нуля. Урок 2. Переносим и настраиваем Yii и проект нашего сайта на рабочем сервере. Избавляемся от index.php в url (09.07.2014) free
  14. 1 Курс по Yii с нуля. Урок 1. Устанавливаем Yii на локальном компьютере. Заводим проект будущего сайта. (10.03.2013) free

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.