1

我正在建立一个 Magento 网站。目前在我已经建立的帐户注册表格上,因此有一个下拉框,允许客户选择他们的“客户组”。

例如,如果有四个不同的客户组,则有四个不同的成功电子邮件,默认 Magento 一个,我将创建 3 个)。我需要的是根据选择哪个客户组发送适当的电子邮件。

我在 AccountController.php 中找到了发送新电子邮件的功能:

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

我最初的想法是在 app/locale/en_US/template/email 中创建其他电子邮件文件

但我不知道哪个文件/函数选择“account_new.html”作为默认电子邮件文件,所以我可以根据客户组 ID 实施一些检查。

我不确定接下来的步骤来解决这个问题,例如如何编辑这个文件以及在哪里创建不同的成功电子邮件。

4

1 回答 1

1

您可能需要覆盖 Mage_Customer_Model_Customer 类来控制函数 sendNewAccountEmail()。此功能是系统决定发送哪封电子邮件的方式,理论上您可以覆盖此功能。

您可能知道如何进行覆盖,但以防万一:

<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-16T00:34:18.677 回答