minishop2 файл во вложении при заказе
Всем привет. Подскажите пожалуйста один момент.
При оформлении заказа в minishop2 формируются два письма, одно для менеджеров, одно для клиентов.
Я реализовал функционал, который генерирует Excel-файл с информацией о заказе (при формировании заказа клиентом). Этот файл сохраняется на сайте, а в таблицу БД с заказами, в поле properties я записываю путь к этому файлу.
Затем в чанке tpl.msEmail.new.manager я даю ссылку на скачку этого файла, примерно так:
Вопрос в том, как сделать чтобы данный файл был вложением к письму?
(Вариант с ссылкой не устраивает), подскажите что можно придумать.
При оформлении заказа в minishop2 формируются два письма, одно для менеджеров, одно для клиентов.
Я реализовал функционал, который генерирует Excel-файл с информацией о заказе (при формировании заказа клиентом). Этот файл сохраняется на сайте, а в таблицу БД с заказами, в поле properties я записываю путь к этому файлу.
Затем в чанке tpl.msEmail.new.manager я даю ссылку на скачку этого файла, примерно так:
<a href="[[++site_url]]assets/[[+properties.excelfile]]">Скачать Excel-Файл</a>
Т.е. приходит стандартное письмо заказа Mnishop2 менеджеру, а в нём ссылка на этот файл. Вопрос в том, как сделать чтобы данный файл был вложением к письму?
(Вариант с ссылкой не устраивает), подскажите что можно придумать.
Комментарии: 2
У minishop2 есть своя функция отправки писем, видимо ее надо расширить, что бы принимала файлы.
Письма я так понимаю отправляются при смене статуса, вот здесь
Файл прикрепить можно так
Письма я так понимаю отправляются при смене статуса, вот здесь
Файл прикрепить можно так
$mail->attach($modx->getOption('base_path').'путь/к/файлу.txt');
Спасибо, но уже реализовал… конечно не корректно, потом поправлю (так как при обновлении все затрётся).
Поправил метод changeOrderStatus, а именно для менеджеров
Затем поправил метод sendEmail
Поправил метод changeOrderStatus, а именно для менеджеров
if ($status->get('email_manager')) {
$subject = $this->pdoTools->getChunk('@INLINE ' . $status->get('subject_manager'), $pls);
$tpl = '';
if ($chunk = $this->modx->getObject('modChunk', $status->get('body_manager'))) {
$tpl = $chunk->get('name');
}
$body = $this->modx->runSnippet('msGetOrder', array_merge($pls, array('tpl' => $tpl)));
$emails = array_map('trim', explode(',',
$this->modx->getOption('ms2_email_manager', null, $this->modx->getOption('emailsender')))
);
// Получаем файл
$attachment = $order->get('properties')["excelfile"];
if (!empty($subject)) {
foreach ($emails as $email) {
if (preg_match('#.*?@.*#', $email)) {
//$this->sendEmail($email, $subject, $body);
$this->sendEmail($email, $subject, $body, $attachment);
}
}
}
}
Затем поправил метод sendEmail
public function sendEmail($email, $subject, $body = '', $attachment)
{
$this->modx->getParser()->processElementTags('', $body, true, false, '[[', ']]', array(), 10);
$this->modx->getParser()->processElementTags('', $body, true, true, '[[', ']]', array(), 10);
/** @var modPHPMailer $mail */
$mail = $this->modx->getService('mail', 'mail.modPHPMailer');
$mail->setHTML(true);
$mail->address('to', trim($email));
$mail->set(modMail::MAIL_SUBJECT, trim($subject));
$mail->set(modMail::MAIL_BODY, $body);
$mail->set(modMail::MAIL_FROM, $this->modx->getOption('emailsender'));
$mail->set(modMail::MAIL_FROM_NAME, $this->modx->getOption('site_name'));
$mail->attach(MODX_BASE_PATH.'assets/'.$attachment);
if (!$mail->send()) {
$this->modx->log(modX::LOG_LEVEL_ERROR,
'An error occurred while trying to send the email: ' . $mail->mailer->ErrorInfo
);
}
$mail->reset();
}
Конечно бы разобраться стоит, как правильно расширять, буду благодарен, если кто подскажет корректное решение, а так всё работает.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.