2011-07-29 39 views
14

app\locale\en_US\template\email\sales\order_new.html是有問題的文件。編輯Magento銷售電子郵件支付塊

如何在不影響網站其他部分的情況下編輯{{var payment_html}}?

這似乎是部分來源於:app\design\frontend\base\default\template\payment\info\default.phtml

我是正確這件事嗎?但該文件在網站的其他地方使用。那也正確嗎?

我想創建一個單獨的文件,說default_email.phtml,它分開的樣式,並且有order_new.phtml代替新文件。

我假設我需要在layout\***.xml中包含我的default_email.phtml文件。我會在哪裏做這件事?

回答

0

在/app/code/core/Mage/Sales/Model/Order.php中有一個名爲「sendNewOrderEmail」的方法。這是你需要影響的。你會發現代碼simmilar以下幾點:

$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」數據獲取設置。把它換成你想要的東西。

6

我做的第一件事就是搜索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'}} 

上面的代碼解析電子郵件/ 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

我有同樣的問題。我所做的只是改變了電子郵件,將以下內容添加到付款信息類中。

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

然後創建模板,如果使用這種支付方式的電子郵件將插入這個模板來支付部分。

希望有幫助!

相關問題