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() и не нашел ни одного! Интересно.

Но, надеюсь, это даст вам немного направления.

Другие вопросы по тегам