在Magento中默认提供了订阅邮件的代码,但退订则需要二次开发或安装插件,本帖旨在探讨邮件订阅和尤其是退订的相关代码实现方式。
使用系统所提供的方法
订阅和退订操作的数据表是newsletter_subscriber,对应的数据列为subscriber_status,值有1,2和3对应的意思如下:
1: Subscribed 2: Status Not Active 3: Unsubscribed
以下某邮箱退订后在数据表中的显示:
Magento系统中提供了对应的方法来处理退订和订阅,示例代码如下:
<?php
require_once 'app/Mage.php';
Mage::app();
/* To Subscribe */
Mage::getModel('newsletter/subscriber')->subscribe('name@domain.com');
/* To Unsubscribe */
Mage::getModel('newsletter/subscriber')->loadByEmail('name@domain.com')->unsubscribe();
?php>
直接对数据库进行操作
本方法通过在template目录下添加代码来处理退订,比如我们在app/design/frontend/default/模板名/template下建立一个unsub文件夹,并在unsub下创建一个unsubscribe.phtml文件来处理退订,这里为了简便,我们采用GET的方式来提交邮箱,您可以配合表单应用POST方式进行提交。示例代码如下:
<?php
require_once 'app/Mage.php';
Mage::app();
if($_GET['unsub']==1 && $email = $_GET['email']){ //获取退订状态以及提交的email
//从数据库里读取订阅状态信息
$read = Mage::getSingleton("core/resource")->getConnection('core_read');
$sql = "select subscriber_status from newsletter_subscriber where subscriber_email = '".$email."'";
$result = $read->fetchAll($sql); //可使用fetchRow查找一条
if(!$result or $result[0]['subscriber_status'] != 1){
die('Sorry, we can not find your record or you have already unsubscribed');
}else{
//更改订阅状态
$write = Mage::getSingleton("core/resource")->getConnection('core_write');
$sql = "update newsletter_subscriber set subscriber_status = 3 where subscriber_email = '".$email."'";
$write->query($sql);
}
}else{
die('Sorry, we can not find your record');
}
?>
以上代码添加完毕后,在CMS > Pages下添加一个页面用于处理退订及退订完成后显示的页面,并在其中添加如下代码:
{{block type="core/template" name="unsub" template="unsub/unsubscribe.phtml"}}
<h2>Your email address has been successfully removed from our newsletter list.</h2>
其中name以及template的值对应前面创建的目录及文件名。