Редактирование платежного модуля электронной почты продаж Magento

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. Где бы я это сделал?

Ответы

Ответ 1

Первое, что я сделал, это поиск в исходном коде 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. Это указывает на дальнейшую логику заполнения платежного блока посредством платежной информации. Это создает блок, и похоже, что это непросто расширить/изменить/изменить на первый взгляд. Да, мы можем применить шаблон к типу конкретного (платежного) блока, так как theres созданный блок, но мы не можем легко проверить, какой блок мы хотим загрузить. Также шаблон отклоняется в конструкции Mage_Payment_Block_Info

Позволяет проверить другой способ.

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

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

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

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

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

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

{{layout handle="sales_email_order_items" order=$order}}

Ответ 2

В/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". Просто поменяйте его на то, что вы хотите.

Ответ 3

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

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

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

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