1

Magentoサイトを構築しています。現在、アカウント登録フォームに作成したので、顧客が「顧客グループ」を選択できるドロップダウンボックスがあります。

たとえば、4つの異なる顧客グループがある場合、デフォルトのMagento 1つと私が作成する3つの異なる成功メールが4つあります)。私が必要とするのは、どの顧客グループが選択されたかに基づいて、適切な電子メールが送信されます。

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

関数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-16T00:34:18.677 に答える