magr0s 29 апреля 2015 0 5
Здравствуйте.
Fatal error: Cannot redeclare class modSiteWebPublicMailerProcessor in /home/w/weblifenet/public_html/demo/sand/public_html/core/components/modxsite/processors/site/web/public/mailer.class.php on line 12
Пытаюсь отправить почту через процессор MODX
процессор вызываю через коннектор

require_once dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))).'/model/modx/mail/modphpmailer.class.php';
class modSiteWebPublicMailerProcessor extends modPHPMailer {
// ...
}
return 'modSiteWebPublicMailerProcessor';


в чем здесь может быть проблема?
include нигде не используется. коннектор стандартный из пакета modxSite…
интересно в чем здесь проблема, м?
5 комментариев
Fi1osof1
Fi1osof 29 апреля 2015г в 16:35 #
Проблема в том, что вы все не по фэншую делает. modPHPMailer не является наследником класса modProcessor, а потому его нельзя использовать как основу для процессора. Правильней вашим процессором расширить modProcessor и в методе process() получить сервис почты. $mailer = $this->modx->getService('mail.modPhpMailer');

P.S. И не пишите никогда такого: dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))).'/model/modx/mail/modphpmailer.class.php';
Правильней MODX_CORE_PATH.'model/modx/mail/modphpmailer.class.php';
А в предложенном мной варианте этого вообще не нужно.
m
magr0s 30 апреля 2015г в 09:35 #
Спасибо большое.
Замечание учтено исправлюсь
Fi1osof1
Fi1osof 30 апреля 2015г в 10:24 #
ОК. По результатам отпишитесь помогло ли.
m
magr0s 10 мая 2015г в 22:03 #

class SiteWebPublicMailerProcessor extends modProcessor{

    public $body = '';

    public function initialize(){

        $this->setDefaultProperties(
            array(
                'from_email'    =>'no-replay@'.$_SERVER['HTTP_HOST']
                ,'from_name'    =>$this->modx->getOption('site_name')
                ,'body'         =>'hello world!'

            )
        );
/*
* в моем случае существует ресурс с настройками (Твшки)
* оттуда тянем email для отправки
*/
        if ($settings = $this->modx->getObject('modResource',2)){
            $this->setProperty('to_email', $settings->getTVValue('email'));
        }

        if (!$this->getProperty('to_email')){
            $this->addFieldError('to_email', 'Ошибка получения email адреса.');
        }

        if ($this->hasErrors()){
            return 'Возникли ошибки при отправке сообщения.';
        }

        return parent::initialize();
    }

    public function process(){
        $this->body = $this->prepareMailBody();
        if ($this->SendMail()){
            return $this->success('Сообщение успешно отправлено.');
        } else {
            return $this->failure('Сообщение не отправлено.');
        }
    }

    public function prepareMailBody(){
        return '';
    }

    public function SendMail(){
        $this->modx->getService('mail', 'mail.modPHPMailer');
        $this->modx->mail->set(modMail::MAIL_BODY,$this->body);
        $this->modx->mail->set(modMail::MAIL_FROM,$this->getProperty('from_email'));
        $this->modx->mail->set(modMail::MAIL_FROM_NAME,$this->getProperty('from_name'));
        $this->modx->mail->set(modMail::MAIL_SUBJECT,$this->getProperty('subject'));
        $this->modx->mail->address('to', $this->getProperty('to_email'));
        $this->modx->mail->setHTML(true);
        $status = $this->modx->mail->send();
        $this->modx->mail->reset();
        return $status;
    }

}
return 'SiteWebPublicMailerProcessor';
m
magr0s 10 мая 2015г в 22:04 #
в версии сайта этот класс расширяется.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.