Добавить приложение к заказу email + Magento - PullRequest
4 голосов
/ 12 июля 2011

Мне нужно прикрепить файл к письму, которое Magento отправляет, когда клиент размещает заказ.

Это вложение может быть PDF, HTML или простым TXT, и оно должно содержать сводку заказа (SKU, Количество, Цена за единицу, Общая цена).

Как я могу добиться этого?

Заранее спасибо!

1 Ответ

12 голосов
/ 14 июля 2011

Решение не очень сложное, хотя для его реализации потребуется некоторое время.Я дам краткое объяснение всех необходимых шагов.

Основные шаги:

  1. Составьте свое приложение в письме с заказом и передайте его отправителю
  2. Перейдите в шаблон электронной почты
  3. Добавьте его к фактическому письму, отправленному в виде вложения

1) Вам необходимо переписать класс Mage_Sales_Model_Order.Перезаписать метод `sendNewOrderEmail () 'в этом классе.

Там вам нужно составить вложение, которое вы хотите отправить клиенту.Скопируйте исходный код метода sendNewOrderEmail() в свой метод перезаписи и поместите следующие строки непосредственно перед $mailer->send() (для нашего примера мы возьмем простой случай - мы отправим текстовый файл, который будет содержать только общую сумму заказа, вложение будет иметь имя «summary.txt»)

$fileContents = "Hello, here is the copy of your invoice:\n";
$fileContents .= sprintf("Grand total: %.2f", $this->getGrandTotal()) . "\n";
$fileContents .= "Thank you for your visit!";
$fileName = 'summary.txt';
$mailer->addAttachment($fileContents, $fileName);

2) Переписать Mage_Core_Model_Email_Template_Mailer - добавить туда метод addAttachment($fileContents, $fileName), который добавит переданные вложения в защищенную переменную, которая хранит массив вложений.

Перезаписать send() метод в этом классе.В этом методе вам нужно будет передать массив вложений в каждый отправленный шаблон электронной почты.Например, добавьте строки вроде

$emailTemplate->setAttachments($this->getAttachments());

прямо перед строкой $emailTemplate->setDesignConfig...

3) Перепишите Mage_Core_Model_Email_Template.

Добавьте туда метод setAttachments($attachments), который должен установить входящие вложения для какой-либо защищенной переменной.

Перезаписать send() метод в этом классе.В этом методе вам нужно будет добавить вложения в отправленное письмо.Поместите строки как

foreach ($this->getAttachments() as $atInfo) {
    $attachment = $mail->createAttachment($atInfo['fileContents']);
    $attachment->filename = $atInfo['fileName'];
}

прямо перед строкой $mail->send().

Вот и все.Это действительно не очень сложно сделать эту задачу для разработчика Magento.Просто требуется некоторое время, чтобы составить содержимое, переписать классы и завершить интерфейсы.

...