2012-05-11 51 views
9

我已經爲自定義模塊創建了一個電子郵件模板,將文件放置在app/locale/en_US/template/email中,並將其配置在我的模塊配置XML文件中。現在我想通過代碼在控制器中檢索該模板。我曾嘗試過:Magento通過代碼獲取電子郵件模板

$emailTemplate = Mage::getModel('core/email_template')->loadByCode('custom_template'); 

但它返回一個NULL電子郵件模板。我的模塊電子郵件模板配置是:

<global> 
    <template> 
     <email> 
      <custom_template> 
       <label>Some custom email template</label> 
       <file>custom_template.html</file> 
       <type>html</type> 
      </custom_template> 
     </email> 
    </template> 
</global> 

我錯過了什麼?

** 編輯 **

我發現this代碼,但行

$template_collection = Mage::getResourceSingleton('core/email_template_collection'); 

返回一個空的集合。我試圖調查Magento的管理源,發現Mage_Adminhtml_Block_System_Email_Template_Grid哪個使用相同的行來獲得一個集合,顯然,它適用於Magento,但不適用於我的代碼。爲什麼?

回答

16

的PHP你貼

$emailTemplate = Mage::getModel('core/email_template')->loadByCode('custom_template'); 

將從數據庫加載電子郵件模板。具體來說,從core_email_template表。您放置在文件系統上的模板是默認模板。您應該可以使用loadDefault方法加載它。

$emailTemplate = Mage::getModel('core/email_template')->loadDefault('custom_template'); 
+2

你完全釘了它!謝謝! –

+0

謝謝你艾倫...... –

4

如果有人正在尋找如何發送基於現有的Magento郵件模板Magento的電子郵件完整的示例代碼,下面的效果很好。它不需要任何XML配置。

// This is the name that you gave to the template in System -> Transactional Emails 
$emailTemplate = Mage::getModel('core/email_template')->loadByCode('My Custom Email Template'); 

// These variables can be used in the template file by doing {{ var some_custom_variable }} 
$emailTemplateVariables = array(
'some_custom_variable' => 'Hello World' 
); 

$processedTemplate = $emailTemplate->getProcessedTemplate($emailTemplateVariables); 

$emailTemplate->setSenderName('Joe Bloggs'); 
$emailTemplate->setSenderEmail('[email protected]'); 
$emailTemplate->setTemplateSubject("Here is your subject"); 

$emailTemplate->send('[email protected]', 'Joanna Bloggs', $emailTemplateVariables);