Magento: добавление счета в формате PDF к электронному адресу счета
Последние пару дней я искал примеры и пытался сделать это сам, но я застрял в следующем.
Я использую Magento 1.7.0.2. Я хочу добавить счет-фактуру PDF в качестве вложения в транзакционное электронное письмо при создании счета.
Я пробовал несколько вещей, включая изменение /Mage/Sales/Model/Order/Invoice.php, /Mage/Core/Model/Email/Template.php и /Mage/Core/Model/Email/Template/Mailer.php.
Я знаю, какие файлы участвуют в процессе, я знаю, куда добавить вложение, я просто не могу понять, как на самом деле сгенерировать PDF и прикрепить его к электронному письму.
Также кажется, что способ генерации электронных писем был изменен с magento 1.7.0.0, и все объяснения относятся к 1.6.x
Я также знаю, что существует несколько расширений (например, FOOMAN), но я предпочитаю изменять файлы самостоятельно (я хочу, чтобы моя установка была максимально чистой от расширений).
2 ответа
Я искал в Интернете несколько часов, но решения были для более старой версии Magento, моя версия 1.7.0.2. И способ, которым Magento обрабатывал электронную почту, изменился. Вот шаги, как я это делаю, надеюсь, это полезно для вас.
1) Изменить приложение / код / ядро / маг / ядро / модель / электронная почта / шаблон / Mailer.php
Part 1, add protected $emailTemplate; to the top of the class:
class Mage_Core_Model_Email_Template_Mailer extends Varien_Object
{
/**
* List of email infos
* @see Mage_Core_Model_Email_Info
*
* @var array
*/
protected $_emailInfos = array();
// Add the following one line
protected $emailTemplate;
Часть 2 обновляет функцию send()
public function send()
{
// the original was $emailTemplate = Mage::getModel('core/email_template');
// Change it to the following four lines:
if ($this->emailTemplate)
$emailTemplate = $this->emailTemplate;
else
$emailTemplate = Mage::getModel('core/email_template');
Часть 3 добавить функцию в конец класса:
public function addAttachment(Zend_Pdf $pdf, $filename){
$file = $pdf->render();
$this->emailTemplate = Mage::getModel('core/email_template');
$attachment = $this->emailTemplate->getMail()->createAttachment($file);
$attachment->type = 'application/pdf';
$attachment->filename = $filename;
}
2) Обновление приложения / кода / ядра / Маг / Продажи / Модель / Заказ /Invoice.php
Update sendEmail function
$mailer = Mage::getModel('core/email_template_mailer');
// the next two lines were added
$pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf(array($this));
$mailer->addAttachment($pdf,'invoice.pdf');
if ($notifyCustomer) {
$emailInfo = Mage::getModel('core/email_info');
$emailInfo->addTo($order-
Оригинальный URL находится здесь: http://www.ericpan.com/2013/02/14/add-pdf-attachment-to-invoice-email/
Вы можете проверить
Mage_Adminhtml_Controller_Sales_Invoice
Чтобы увидеть пример сгенерированного PDF-файла счета-фактуры:
$pdf = Mage::getModel('sales/order_pdf_invoice')->getPdf(array($invoice));
$this->_prepareDownloadResponse('invoice'.Mage::getSingleton('core/date')->date('Y-m-d_H-i-s').
'.pdf', $pdf->render(), 'application/pdf');
Теперь это фактически рендеринг PDF для включения его в HTTP-ответ, а не сохранение его в виде файла, но в модели счета-фактуры или абстрактной модели PDF должен быть метод для сохранения PDF-файла.
И затем, чтобы добавить вложение, вы, вероятно, хотите посмотреть на:
Zend_Mail::addAttachment()
У меня нет удобного примера, и на самом деле искал Magento 1.7 для какой-либо ссылки на addAttachment()
и не нашел ни одного! Интересно.
Но, надеюсь, это даст вам немного направления.