我设法添加了第二封电子邮件选择字段,但我想知道如何向简报订阅者发送2封不同的电子邮件
目前,Magento默认只允许发送一个成功的电子邮件模板。我们可以通过设置此成功电子邮件模板
System > Configuration > Newsletter > Success Email Template
你可以看到,它使用了一个下拉部分。这允许我们只为成功邮件设置一个电子邮件模板。因此,您需要将此部分更改为multiselct,以便您可以选择多个成功的电子邮件模板。你又需要重新编写Mage_Newsletter
的Subscriber
,以一次发送多个邮件模型类。
因此,让我们创建一个自定义模块,为我们这样做。我喜欢称这个模块为Rkt_TwoNlSuccess
。
模块的激活文件
档案: app\etc\modules\Rkt_TwoNlSuccess.xml
<config>
<modules>
<Rkt_TwoNlSuccess>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Newsletter />
</depends>
</Rkt_TwoNlSuccess>
</modules>
</config>
注意我们的模块取决于Mage_Newletter
模块。有必要。
System.xml文件
此文件定义系统配置定义和更改。我们使用此文件使成功的电子邮件模板字段多选而不是选择。
档案: app\code\local\Rkt\TwoNlSuccess\etc\system.xml
<config>
<sections>
<newsletter>
<groups>
<subscription>
<fields>
<success_email_template>
<label>Success Email Template</label>
<frontend_type>multiselect</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>1</show_in_store>
</success_email_template>
</fields>
</subscription>
</groups>
</newsletter>
</sections>
</config>
注意我们改变了前面的类型
<frontend_type>multiselect</frontend_type>
所以我们的第一部分结束了。现在是时候进行模型重写了
重写模型文件
我们需要重写sendConfirmationSuccessEmail()
模型类中定义的方法Mage_Newsletter_Model_Subscriber
。这很重要,因为默认代码允许我们只发送一封邮件。为此,您需要定义两个文件。
档案: app\code\local\Rkt\TwoNlSuccess\etc\config.xml
<config>
<modules>
<Rkt_Freepro>
<version>1.0.0</version>
</Rkt_Freepro>
</modules>
<global>
<models>
<newsletter>
<rewrite>
<subscriber>Rkt_TwoNlSuccess_Model_Subscriber</subscriber>
</rewrite>
</newsletter>
</models>
</global>
</config>
这个文件告诉magento,我需要Mage_Newsletter_Model_Subscriber
用我的自定义类重写该类Rkt_TwoNlsuccess_Model_Subscriber
。因此,magento将处理此自定义模型类而不是默认类。这是Magento提供的极大灵活性。
档案: app\code\local\Rkt\TwoNlSuccess\Model\Subscriber.php
<?php
class Rkt_TwoNlSuccess_Model_Subscriber extends Mage_Newsletter_Model_Subscriber
{
const XML_PATH_SUCCESS_EMAIL_TEMPLATE = 'newsletter/subscription/success_email_template';
const XML_PATH_SUCCESS_EMAIL_IDENTITY = 'newsletter/subscription/success_email_identity';
public function sendConfirmationSuccessEmail()
{
if ($this->getImportMode()) {
return $this;
}
if(!Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_TEMPLATE)
|| !Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_IDENTITY)
) {
return $this;
}
$translate = Mage::getSingleton('core/translate');
/* @var $translate Mage_Core_Model_Translate */
$translate->setTranslateInline(false);
$email = Mage::getModel('core/email_template');
$email_templates = explode(',', Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_TEMPLATE));
$identity = Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_IDENTITY);
foreach ($email_templates as $template) {
$email->sendTransactional(
$template,
$identity,
$this->getEmail(),
$this->getName(),
array('subscriber'=>$this)
);
}
$translate->setTranslateInline(true);
return $this;
}
}
这里我们重写方法sendConfirmationSuccessEmail()
。以下代码可以解决这个问题
$email_templates = Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_TEMPLATE);
$identity = Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_IDENTITY);
foreach ($email_templates as $template) {
$email->sendTransactional(
$template,
$identity,
$this->getEmail(),
$this->getName(),
array('subscriber'=>$this)
);
}
此代码允许您发送任意数量的电子邮件。所以,如果您愿意,现在可以发送两封以上的成功电子邮件。
编辑
你设置need confirm
为YES
。这就是实际问题。如果设置了这些值,那么Magento将向仅登录的客户发送成功邮件,这些客户正在尝试订阅简报。对于访客用户,它将始终发送确认邮件。
要为所有用户发送成功邮件,您需要设置need confirm
为NO
。
请注意,我的subscriber.php
文件中有一个小错误。我修好了它并进行了测试。它适用于本地服务器。我在这里更新了这段代码。所以保存这个更新的代码app/code/local/Rkt/TwoNlSuccess/Model/Subscriber.php