2012-12-15 2 views
1

Magento 사이트를 구축 중입니다. 현재 계정 등록 양식에 있으므로 고객이 '고객 그룹'을 선택할 수있는 드롭 다운 상자가 있습니다.선택한 고객 그룹을 기반으로 성공적인 등록

예를 들어 네 개의 서로 다른 고객 그룹이있는 경우 기본 Magento 하나와 내가 만드는 3 개의 성공 이메일이 있습니다. 내가 필요한 것은 적합한 이메일이 발송 된 고객 그룹을 선택하는 것입니다.

내가 AccountController.php의 새로운 이메일을 보내는 기능을 발견했다

:

$customer->sendNewAccountEmail(
     $isJustConfirmed ? 'confirmed' : 'registered', 
     '', 
     Mage::app()->getStore()->getId() 
    ); 

내 초기 생각은 응용 프로그램/로케일/ko 페이지/템플릿의 다른 이메일 파일을 생성하는 것입니다/이메일

하지만 어떤 파일/기능이 'account_new.html'을 기본 전자 메일 파일로 선택했는지 알 수 없으므로 고객 그룹 ID를 기반으로 일부 검사를 구현할 수 있습니다.

나는이 파일을 편집하는 방법과 다른 성공 이메일을 어디서 만들지와 같은 다음 단계에 대해 확신 할 수 없다.

답변

1

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; 
    } 
} 

은 분명히 개선의 여지가 많이 즉 동적으로부터 고객 그룹 및 생성 된 구성을 풀 수있는 방법오고,이 추가적으로이 동적 체크를이 함수에 추가하는 것은 간단한 정적 솔루션입니다.

+0

안녕하세요. 도움을 주셔서 감사합니다. 이 부분적으로 작동하고있다. 'sendNewAccountEmail'함수에 대한 재정의가 작동하며 테스트 목적으로 group1을 보내는 전자 메일 매개 변수로, 'group1'=> self :: XML_PATH_REGISTER_EMAIL_TEMPLATE를 전자 메일로 보냅니다. 지금 내가 겪고있는 문제는 다른 전자 메일 파일을 어디에 두는 것입니까? 아니면 백엔드에서 생성 된 것입니까? 내가 백엔드를 보면 'Configuration'- 'General'탭에 모듈 이름이있는 탭이 있습니다. 그러나이 버튼을 클릭하면 내용을 404 페이지 오류가 표시됩니다. – thairish

+0

트랜잭션 전자 메일은 시스템 -> 트랜잭션 전자 메일에서 만듭니다. 사용자가 만든 구성에 로그인 한 후 해당 구성을 선택합니다. 404가 표시되면 로그 아웃했다가 다시 로그인해야 올바르게 표시됩니다. 이것을 선택하면 구성 XML 경로를 사용하여 " 'yourmodule/email/group1_template'"과 같은 전자 메일 템플리트 ID를 가져옵니다. – Ian

관련 문제