2012-12-19 60 views
4

我試圖在電子郵件主題中顯示Magento中新訂單電子郵件的付款方式。原因在於,我們的客戶可以輕鬆地從Magento發送的電子郵件主題中確定訂單是通過支付網關還是Paypal Express發送的。Magento變量顯示電子郵件主題中的付款方式

我不完全確定實現這個目標的最佳方法,我想認爲已經有一些可用的東西可用於此目的。

{{var payment_html}} 

返回郵件模板的付款方式塊...

{{var paymentMethod}} 

回報絕對沒有在郵件的標題所以不能確定這是否是一個貶值的變量現在。

我想也可以選擇創建一個自定義屬性,在靜態塊中調用它,然後在電子郵件模板中將其顯示爲一個自定義變量,但它似乎是一個相當長的纏繞方法,純粹是爲了獲取文本字符串「通過SagePay」或「通過Paypal Express」。

任何幫助將不勝感激。

在此先感謝。

回答

14

您實際上不需要執行任何自定義,該變量已經在模板中通過對象鏈可用。該鏈由Magento模板支持,並允許使用對象的getter。

在這種情況下,您需要檢索訂單的付款對象,然後檢索其方法實例並從方法實例中檢索方法標題。這是非常簡單的建設:

{{var order.getPayment().getMethodInstance().getTitle()}} 

這應該對你有幫助!

+0

哇,很酷的功能,但不是它在業務邏輯中有些混亂? –

+0

@PavelNovitsky如果你對這種方法感到困惑,你可以使用更簡單的方法:''{{var order.payment.method_instance.title}}'。它也會這樣做。但它不是一團糟,因爲這是添加到電子郵件模板引擎的特殊功能,所以開發人員不需要指定所有可能的變量,只需指定一個包含所有必需數據的對象即可。 –

+0

因此,'billing'=> $ this-> getBillingAddress()在你的方法中也是沒用的:) –

2

方法Mage_Sales_Model_Order :: sendNewOrderEmail()負責發送新的ordr電子郵件。

$paymentBlock = Mage::helper('payment')->getInfoBlock($this->getPayment()) 
    ->setIsSecureMode(true); 
$paymentBlock->getMethod()->setStore($storeId); 
$paymentBlockHtml = $paymentBlock->toHtml(); 

...

$mailer->setTemplateParams(array(
    'order'  => $this, 
    'billing'  => $this->getBillingAddress(), 
    'payment_html' => $paymentBlockHtml 
) 

payment_html呈現塊的HTML輸出,所以你不能使用它。

您可以使用付款方式再添加一個assoc key(使用rewite或local/mage trick),並使用交易電子郵件將此param添加到主題。

+0

此解決方案爲我工作 –

相關問題