Редактирование почтового блока продаж Magento - PullRequest
15 голосов
/ 29 июля 2011

app\locale\en_US\template\email\sales\order_new.html файл, о котором идет речь.

Как можно отредактировать {{var payment_html}}, не затрагивая другие разделы сайта?

Кажется, этот раздел взят из: app\design\frontend\base\default\template\payment\info\default.phtml

Правильно ли я по этому поводу? Но этот файл используется в других местах на сайте. Это тоже правильно?

Я хочу создать отдельный файл, скажем default_email.phtml, стилизовать его отдельно и сделать так, чтобы order_new.phtml включал новый файл.

Я предполагаю, что мне нужно включить файл default_email.phtml в layout\***.xml. Где бы я это сделал?

Ответы [ 3 ]

6 голосов
/ 06 февраля 2013

Первое, что я сделал, - это поиск по исходному коду Magento. Предполагая, что {{var payment_html}} обрабатывается где-то, что я искал на payment_html. Несколько результатов соответствуют поиску;

Mage_Sales_Model_Order
Mage_Sales_Model_Order_Creditmemo
Mage_Sales_Model_Order_Invoice
Mage_Sales_Model_Order_Shipment

Таким образом, информация для этого платежного блока должна быть там. Я взял Mage_Sales_Model_Order и проверил переменную $paymentBlockHtml. Это указывает на дальнейшую логику для заполнения блока оплаты информацией о платеже. Он создает блок и выглядит так, что его нелегко расширить / изменить / изменить с первого взгляда. Да, мы можем применить шаблон к определенному типу (оплаты) блока, так как он создан, но мы не можем легко проверить, какой блок мы хотим загрузить. Также шаблон отменяется в конструкции Mage_Payment_Block_Info

Давайте проверим другой путь.

Давайте сделаем что-нибудь классное, почему мы не добавляем в электронное письмо блок, который содержит правильную информацию, но более важно, когда можно переключиться на правильный случай. Поскольку синтаксический анализатор шаблонов используется для анализа переменных и дескрипторов макета, мы можем добавить следующее вместо блока {{var payment_html}} и получить эту информацию в самом блоке.

{{block type='core/template' template='email/templatename.phtml'}}

Приведенный выше код выполняет синтаксический анализ email / templatename.phtml в электронном письме, что означает, что вы можете сделать что-нибудь в этом шаблоне, чтобы показать правильные данные. Прежде чем мы сможем получить данные платежа в этом шаблоне, мы должны добавить аргумент заказа с данными заказа. Это довольно просто;

{{block type='core/template' order=$order template='email/templatename.phtml'}}

В шаблоне мы можем сделать $this->getOrder()->getPayment() для получения информации о платеже или $this->getOrder->getPayment()->toHtml() или обработать данные другим способом.

Бонус; Другое решение - работать с маркерами макета и установить правильный шаблон и ввести в layout.xml ниже пример для элементов заказа в том же электронном письме. Он работает так же, как блок, но только с некоторыми настройками в макете XML.

{{layout handle="sales_email_order_items" order=$order}}
0 голосов
/ 26 ноября 2013

У меня была такая же проблема. Чтобы изменить только адрес электронной почты, я добавил следующее в класс информации об оплате.

protected function _construct() {
     parent::_construct();
     $this->setTemplate('payment/info/{new template}.phtml');
}

Затем создайте шаблон и электронное письмо вставит этот шаблон в раздел оплаты, если используется этот метод оплаты.

Надеюсь, это полезно!

0 голосов
/ 15 декабря 2011

В /app/code/core/Mage/Sales/Model/Order.php есть метод с именем "sendNewOrderEmail". Это то, что вам нужно повлиять. Вы найдете код, похожий на следующий:

$mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>$this->getStoreId()))
                ->sendTransactional(
                    $template,
                    Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $this->getStoreId()),
                    $recipient['email'],
                    $recipient['name'],
                    array(
                        'order'         => $this,
                        'billing'       => $this->getBillingAddress(),
                        'payment_html'  => $paymentBlock->toHtml(),  //Just change this line
                    )
                );

Вы можете видеть, что именно здесь устанавливаются данные payment_html. Просто поменяйте его на то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...