Magento添加email退订功能

Magento Alan 9年前 (2015-05-30) 4327次浏览 0个评论 扫描二维码

在Magento中默认提供了订阅邮件的代码,但退订则需要二次开发或安装插件,本帖旨在探讨邮件订阅和尤其是退订的相关代码实现方式。

使用系统所提供的方法

订阅和退订操作的数据表是newsletter_subscriber,对应的数据列为subscriber_status,值有1,2和3对应的意思如下:

1: Subscribed 2: Status Not Active 3: Unsubscribed

以下某邮箱退订后在数据表中的显示:

Magento添加email退订功能

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

喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址