sendNewAccountEmail() 함수를 제어하려면 Mage_Customer_Model_Customer 클래스를 덮어 써야합니다. 이 기능은 시스템이 전송할 전자 메일을 결정하는 방법이며 이론적으로이 기능을 무시할 수 있습니다.
당신은 아마 재정의를 수행하는 방법을 알고 있지만 단지의 경우 :
<models>
<customer>
<rewrite>
<customer>Namespace_Module_Model_Customer</customer>
</rewrite>
</customer>
</models>
다음, 당신은 시스템 구성 값을 생성 할 수 있습니다,에서 System.Xml, 당신은 새 항목을 만들어야합니다 당신이 가진 "그룹"마다. 이것은 정적 목록이고 그룹은 동적 일 수 있으므로 가장 우아한 해결책은 아닙니다. 그러나 템플릿을 할당하려면 완전히 새로운 모듈이 필요하거나이 파일을 업데이트해야합니다. 하지만 이제 트랜잭션 전자 메일을 만들어이 system.xml 파일의 각 그룹에 할당 할 수 있습니다.
<?xml version="1.0"?>
<config>
<sections>
<yourmodule translate="label" module="yourmodule">
<class>separator-top</class>
<label>your module</label>
<tab>general</tab>
<frontend_type>text</frontend_type>
<sort_order>30</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
<groups>
<email translate="label">
<label>Email Templates</label>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<fields>
<group1_template translate="label comment">
<label>Group 1 Template</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_email_template</source_model>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</group1_template>
<group2_template translate="label comment">
<label>Group 2 Template</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_email_template</source_model>
<sort_order>1</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>0</show_in_store>
</group2_template>
</fields>
</email>
</groups>
</yourmodule>
</sections>
</config>
마지막으로, sendNewAccountEmail()에 대한 재정의 :
class Namespace_Module_Model_Customer {
public function sendNewAccountEmail($type = 'registered', $backUrl = '', $storeId = '0')
{
$types = array(
'registered' => self::XML_PATH_REGISTER_EMAIL_TEMPLATE, // welcome email, when confirmation is disabled
'confirmed' => self::XML_PATH_CONFIRMED_EMAIL_TEMPLATE, // welcome email, when confirmation is enabled
'confirmation' => self::XML_PATH_CONFIRM_EMAIL_TEMPLATE, // email with confirmation link
'group1' => 'yourmodule/email/group1_template',
'group2' => 'yourmodule/email/group2_template',
);
if (!isset($types[$type])) {
Mage::throwException(Mage::helper('customer')->__('Wrong transactional account email type'));
}
if (!$storeId) {
$storeId = $this->_getWebsiteStoreId($this->getSendemailStoreId());
}
$this->_sendEmailTemplate($types[$type], self::XML_PATH_REGISTER_EMAIL_IDENTITY,
array('customer' => $this, 'back_url' => $backUrl), $storeId);
return $this;
}
}
은 분명히 개선의 여지가 많이 즉 동적으로부터 고객 그룹 및 생성 된 구성을 풀 수있는 방법오고,이 추가적으로이 동적 체크를이 함수에 추가하는 것은 간단한 정적 솔루션입니다.
출처
2012-12-16 00:34:18
Ian
안녕하세요. 도움을 주셔서 감사합니다. 이 부분적으로 작동하고있다. 'sendNewAccountEmail'함수에 대한 재정의가 작동하며 테스트 목적으로 group1을 보내는 전자 메일 매개 변수로, 'group1'=> self :: XML_PATH_REGISTER_EMAIL_TEMPLATE를 전자 메일로 보냅니다. 지금 내가 겪고있는 문제는 다른 전자 메일 파일을 어디에 두는 것입니까? 아니면 백엔드에서 생성 된 것입니까? 내가 백엔드를 보면 'Configuration'- 'General'탭에 모듈 이름이있는 탭이 있습니다. 그러나이 버튼을 클릭하면 내용을 404 페이지 오류가 표시됩니다. – thairish
트랜잭션 전자 메일은 시스템 -> 트랜잭션 전자 메일에서 만듭니다. 사용자가 만든 구성에 로그인 한 후 해당 구성을 선택합니다. 404가 표시되면 로그 아웃했다가 다시 로그인해야 올바르게 표시됩니다. 이것을 선택하면 구성 XML 경로를 사용하여 " 'yourmodule/email/group1_template'"과 같은 전자 메일 템플리트 ID를 가져옵니다. – Ian