在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的值对应前面创建的目录及文件名。