1 Отредактировано RainMEN (06-03-2015 15:37:09)

Тема: Отсылка Email по событию как сделать?

Всем привет!

Суть модуль "Управление email-уведомлениями" там создаем нужный нам шаблон, а как и где прописать событие на которое он будет отсылаться?

Еще не понятно как в переменные передавать данные и откуда?

Может где то это уже реализовано? В каком файле можно посмотреть?

2

Re: Отсылка Email по событию как сделать?

С событием разобрался, в главном файле модуля прописываем

public static function adminAutoload() {
        parent::adminAutoload();

        \CMSFactory\Events::create()->onAdminPageCreate()->setListener('sendMail');
    }

    public function sendMail(){
        showMessage('Ураааа');
    }

а как получить созданный шаблон Email и передать в него переменные?

3

Re: Отсылка Email по событию как сделать?

Здравствуйте.

        \CMSFactory\Events::create()->registerEvent($this->data, 'product:load');
        \CMSFactory\Events::runFactory();

где первый параметр масив переменных. Они приходят в первый параметр метода на который установлен листенер, в вашем случае

public static function adminAutoload() {
        parent::adminAutoload();

        \CMSFactory\Events::create()->onAdminPageCreate()->setListener('sendMail');
    }

    public function sendMail($params){
        var_dump($params);
        showMessage('Ураааа');
    }
ImageCMS PHP Team Lead
https://github.com/imagecms/ImageCMS - ночные сборки корпорейта
https://scrutinizer-ci.com/g/imagecms/ImageCMS/badges/quality-score.png?b=development https://codeclimate.com/github/imagecms/ImageCMS/badges/gpa.svg

Thumbs up +1 Thumbs down

4

Re: Отсылка Email по событию как сделать?

Спасибо с этим разобрался.

Как я понял у шаблонов email сообщений поле "Имя шаблона (только латинские)" как то помогает получить шаблон по имени?

Где про это прочитать? smile

5 Отредактировано RainMEN (06-03-2015 16:05:34)

Re: Отсылка Email по событию как сделать?

Почему то при попытка загрузить библиотеку Email выдает ошибку

Fatal error: Using $this when not in object context in /home/p193191/www/codimsites.ru/application/modules/subscribes/subscribes.php on line 172
 public static function adminAutoload() {
        parent::adminAutoload();

        \CMSFactory\Events::create()->onAdminPageCreate()->setListener('subscribersEmail');
    }
public function subscribersEmail(){

        $config['wordwrap'] = TRUE;
        $config['charset'] = 'UTF-8';
        $config['mailtype'] = 'html';

        $this->load->library('email');
        $this->email->initialize($config);

        $this->email->from('igor.pushkarskiy@yandex.ru', 'igor');
        $this->email->to('igor.pushkarskiy@yandex.ru');

        $this->email->subject("Тестовая тема");
        $this->email->message('Тестовое сообщение');

        $this->email->send();

        showMessage('Урааааа!!');
    }
public function __construct() {
        parent::__construct();

        $this->load->module('core');

        $this->load->model('subscribes_model');
        $this->load->model('subscribes_model_group');
        $this->load->model('subscribes_model_users');

        $lang = new MY_Lang();
        $lang->load('subscribes');
    }

Что я забыл подключить? Или что то делаю не правильно?

6

Re: Отсылка Email по событию как сделать?

А чего там у вас в subscribes.php  на 172 строке написано?

Когда то разрабатывал модули для ImageCMS Corporate

7

Re: Отсылка Email по событию как сделать?

Sempai пишет:

А чего там у вас в subscribes.php  на 172 строке написано?

вот  что

 $this->load->library('email');

8 Отредактировано RainMEN (06-03-2015 17:32:53)

Re: Отсылка Email по событию как сделать?

Поменял на

$CI =& get_instance();

        $config['wordwrap'] = TRUE;
        $config['charset'] = 'UTF-8';
        $config['mailtype'] = 'html';

        $CI->load->library('email');
        $CI->email->initialize($config);

        $CI->email->from('igor.pushkarskiy@yandex.ru', 'igor');
        $CI->email->to('igor.pushkarskiy@yandex.ru');

        $CI->email->subject("Тестовая тема");
        $CI->email->message('Тестовое сообщение');

        $CI->email->send();

все заработало!!!
Вопрос почему?


И если писать вот так то ругается на эти строки.

$subscribers = $this->subscribes_model->getListItem();
        $subscribesMailTemplate = $this->subscribes_mail_template->getEmailTemplateByName('new-article');

9

Re: Отсылка Email по событию как сделать?

Метод на который ссылается листенер должен быть статичным и там $this недоступен

ImageCMS PHP Team Lead
https://github.com/imagecms/ImageCMS - ночные сборки корпорейта
https://scrutinizer-ci.com/g/imagecms/ImageCMS/badges/quality-score.png?b=development https://codeclimate.com/github/imagecms/ImageCMS/badges/gpa.svg

Thumbs up Thumbs down

10

Re: Отсылка Email по событию как сделать?

gula.andrij пишет:

Метод на который ссылается листенер должен быть статичным и там $this недоступен

Пытался сделать по примеру

public static function adminAutoload() {
        parent::adminAutoload();

        \CMSFactory\Events::create()->onAdminPageCreate()->setListener('handler', 'Subscribes::__construct');
    }

    public static function handler(){
        $instance = new Subscribes();
        $instance->sendEmail();

        showMessage('sdaasd');

    }

    public function sendEmail(){

        /*$CI =& get_instance();*/

        $config['wordwrap'] = TRUE;
        $config['charset'] = 'UTF-8';
        $config['mailtype'] = 'html';

        $this->load->library('email');
        $this->email->initialize($config);

        // Получаем всех пользователей подписаных на обновления
        /*$CI->load->model('subscribes_model');
        $CI->load->model('subscribes_mail_template');

        $subscribers = $this->subscribes_model->getListItem();
        $subscribesMailTemplate = $this->subscribes_mail_template->getEmailTemplateByName('new-article');

        var_dump($subscribers);
        var_dump($subscribesMailTemplate);
        */

        $this->email->from('igor.pushkarskiy@yandex.ru', 'igor');
        $this->email->to('igor.pushkarskiy@yandex.ru');

        $this->email->subject("Тестовая тема");
        $this->email->message('Тестовое сообщение');

        $this->email->send();

        showMessage('Урааааа!!');
    }

получаю ошибку

Fatal error: Uncaught exception 'Exception' with message 'Can't declarete both.' in E:\DEV\OSERV\OpenServer\domains\trening.loc\application\modules\CMSFactory\BaseEvents.php:71 Stack trace: #0 E:\DEV\OSERV\OpenServer\domains\trening.loc\application\modules\subscribes\subscribes.php(90): CMSFactory\BaseEvents->setListener('handler', 'Subscribes::__c...') #1 E:\DEV\OSERV\OpenServer\domains\trening.loc\application\libraries\BaseAdminController.php(48): Subscribes::adminAutoload() #2 E:\DEV\OSERV\OpenServer\domains\trening.loc\application\libraries\BaseAdminController.php(17): BaseAdminController->autoloadModules() #3 E:\DEV\OSERV\OpenServer\domains\trening.loc\application\modules\admin\pages.php(14): BaseAdminController->__construct() #4 E:\DEV\OSERV\OpenServer\domains\trening.loc\system\core\CodeIgniter.php(309): Pages->__construct() #5 E:\DEV\OSERV\OpenServer\domains\trening.loc\index.php(223): require_once('E:\\DEV\\OSERV\\Op...') #6 {main} thrown in E:\DEV\OSERV\OpenServer\domains\trening.loc\application\modules\CMSFactory\BaseEvents.php on line 71

а если писать так

\CMSFactory\Events::create()->onAdminPageCreate()->setListener('handler');

то при обновлении страницы ничего не происходит, страница обновляется без ошибки и без любого уведомления.

11

Re: Отсылка Email по событию как сделать?

5 часов уже на это потратил  почему то не работает.

12

Re: Отсылка Email по событию как сделать?

Не пойму почему почему вот это не работает?

 public static function adminAutoload() {
        parent::adminAutoload();

        \CMSFactory\Events::create()->onAdminPageCreate()->setListener('handler');
    }

    public static function handler(){
        $instance = new Subscribes();
        $instance->sendEmail();
    }

    public function sendEmail(){
        showMessage('Урааааа!!');
    }

13 Отредактировано RainMEN (07-03-2015 13:52:25)

Re: Отсылка Email по событию как сделать?

Оказалось что в новой версии нельзя обратится к модели из файла модуля, Если в конструкторе этот код убрать то все работает

$this->load->model('subscribes_mail_template')