在Magento中默认提供了订阅邮件的代码,但退订则需要二次开发或安装插件,本帖旨在探讨邮件订阅和尤其是退订的相关代码实现方式。
使用系统所提供的方法
订阅和退订操作的数据表是newsletter_subscriber,对应的数据列为subscriber_status,值有1,2和3对应的意思如下:
1: Subscribed 2: Status Not Active 3: Unsubscribed
以下某邮箱退订后在数据表中的显示:
Magento系统中提供了对应的方法来处理退订和订阅,示例代码如下:
1 2 3 4 5 6 7 8 | <?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方式进行提交。示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?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下添加一个页面用于处理退订及退订完成后显示的页面,并在其中添加如下代码:
1 2 | {{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的值对应前面创建的目录及文件名。