29 апр. 2015 г., 8:44

проблема с redeclare class

Здравствуйте.
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… интересно в чем здесь проблема, м?
Проблема в том, что вы все не по фэншую делает. 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'; А в предложенном мной варианте этого вообще не нужно.
Спасибо большое. Замечание учтено исправлюсь
ОК. По результатам отпишитесь помогло ли.
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';
в версии сайта этот класс расширяется.

Добавить комментарий