您的位置:首页 > 其它

magento 客户等级自动提升并且发送邮件

2013-07-29 15:32 405 查看
      前几天遇到一个客户等级的需求,需要自动提升客户的等级,而且需要通知客户等级的提升。想了一下,大概的思路就是,当客户登陆、或者完成订单的时候,检测客户的ID,获得当前客户所属分组,然后根据客户的ID查询订单表,得到客户在网站上的消费额,最后判断是否达到了相应的客户等级,设置新的等级,并且发送邮件。

     1、首先,我们可以监听客户登陆事件、或者重写用户登陆成功的方法,在这儿,因为本身站点的ajax登陆,监听了客户登陆事件,所以我选择了重写登陆成功的方法,如何重写不做多述,直接贴出控制器的代码部分

     

/*重写用户登录方法*/
public function _loginPostRedirect()
{
$session = $this->_getSession();
if (!$session->getBeforeAuthUrl() || $session->getBeforeAuthUrl() == Mage::getBaseUrl()) {
// Set default URL to redirect customer to
$session->setBeforeAuthUrl(Mage::helper('customer')->getAccountUrl());
// Redirect customer to the last page visited after logging in
if ($session->isLoggedIn()) {
if (!Mage::getStoreConfigFlag(
Mage_Customer_Helper_Data::XML_PATH_CUSTOMER_STARTUP_REDIRECT_TO_DASHBOARD
)) {
$referer = $this->getRequest()->getParam(Mage_Customer_Helper_Data::REFERER_QUERY_PARAM_NAME);
if ($referer) {
// Rebuild referer URL to handle the case when SID was changed
$referer = Mage::getModel('core/url')
->getRebuiltUrl(Mage::helper('core')->urlDecode($referer));
if ($this->_isUrlInternal($referer)) {
$session->setBeforeAuthUrl($referer);
}
}
} else if ($session->getAfterAuthUrl()) {
$session->setBeforeAuthUrl($session->getAfterAuthUrl(true));
}
} else {
$session->setBeforeAuthUrl(Mage::helper('customer')->getLoginUrl());
}
} else if ($session->getBeforeAuthUrl() == Mage::helper('customer')->getLogoutUrl()) {
$session->setBeforeAuthUrl(Mage::helper('customer')->getDashboardUrl());
} else {
if (!$session->getAfterAuthUrl()) {
$session->setAfterAuthUrl($session->getBeforeAuthUrl());
}
if ($session->isLoggedIn()) {
$session->setBeforeAuthUrl($session->getAfterAuthUrl(true));
}
}
$this->_redirectUrl($session->getBeforeAuthUrl(true));
$this->UpdateLive();
}
  上述方法其实也就是复制了客户登录成功的一个action,只是在最后一段加上了$this->UpdateLive() 方法,这个是客户等级提升的方法

/*客户等级提升的方法*/
public function UpdateLive()
{

//获得当前用户对象
$customer = Mage::getSingleton('customer/session')->getCustomer();/*->getCustomerGroupId();*/
//获得当前用户ID
$customerId = $customer->getId();
//获得当前用户所在客户组
$GroupId = $customer->getGroup_id();
//提供用户信息,用于发送邮件
//获取当前用户的邮件
$Customer_email = $customer->getEmail();
//获取当前用户的fristname
$Customer_fristname = $customer->getFirstname();
//print_r($customer);
//exit;
//获得当前客户等级
//执行sql查询出当前用户的总消费额
$read = Mage::getSingleton('core/resource')->getConnection('core_read');
$value = $read->query("SELECT SUM(grand_total) AS total FROM sales_flat_order WHERE customer_id ='$customerId'"); //AND STATUS IN ('trade_finishen', 'complete')
//循环出总的消费额
$row = $value->fetch();
$total =  $row['total'];
if($total < 500)
{
$customer->setData( 'group_id', '3');
$customer->save();
$NowGroupId = $customer->getGroup_id();
}

if(500 < $total && $total < 1000)
{
$customer->setData( 'group_id', '4');
$customer->save();
$NowGroupId = $customer->getGroup_id();
//如果当前客户的ID更新了,则发送邮件给客户
if($GroupId != $NowGroupId)
{
return $this->SendEmailToCustomer($Customer_email,$Customer_fristname,'500','3%');
}else
{
return false;
}
}

if(1000 < $total && $total <1500)
{
$customer->setData( 'group_id', '5');
$customer->save();
$NowGroupId = $customer->getGroup_id();
//如果当前客户的ID更新了,则发送邮件给客户
if($GroupId != $NowGroupId)
{
return $this->SendEmailToCustomer($Customer_email,$Customer_fristname,'1000','6%');
}else
{
return false;
}
}

if(1500 < $total && $total < 5000)
{

$customer->setData( 'group_id', '6');
$customer->save();
$NowGroupId = $customer->getGroup_id();
//如果当前客户的ID更新了,则发送邮件给客户
if($GroupId != $NowGroupId)
{
return $this->SendEmailToCustomer($Customer_email,$Customer_fristname,'1500','9%');
}else
{
return false;
}

}

if(5000 < $total && $total <10000)
{
$customer->setData( 'group_id', '7');
$customer->save();
$NowGroupId = $customer->getGroup_id();
//如果当前客户的ID更新了,则发送邮件给客户
if($GroupId != $NowGroupId)
{
return $this->SendEmailToCustomer($Customer_email,$Customer_fristname,'5000','12%');
}else
{
return false;
}

}

if($total >10000)
{
$customer->setData( 'group_id', '8');
$customer->save();
$NowGroupId = $customer->getGroup_id();
//如果当前客户的ID更新了,则发送邮件给客户
if($GroupId != $NowGroupId)
{
return $this->SendEmailToCustomer($Customer_email,$Customer_fristname,'10000','15%');
}else
{
return false;
}
}

}

/*
*发送邮件告知客户等级的提升.参数传递
*customer/live/live_template
*/
public function SendEmailToCustomer($semail,$sfname,$mothan,$zhekou)
{
define('EMAIL_TEMPLATE', "customer/live/live_template");
$mailSubject = '';
$sender = Array('name'  => 'Customer Service','email' => 'admin@eozy.com');
$to = array($semail);
$storeId = Mage::app()->getStore()->getId();
$template = Mage::getStoreConfig(EMAIL_TEMPLATE);
$mailConfirm = Mage::getModel('core/email_template');
$translate  = Mage::getSingleton('core/translate');
$mailConfirm ->setTemplateSubject($mailSubject)->sendTransactional($template, $sender, $to, '',Array(
'subject'=>$mailSubject,
'customer'=>$customer,
'username' => $sfname,
'morethan' => $mothan,
'zhekou'  => $zhekou
),$storeId);
$translate->setTranslateInline(true);
}


   以上就是自己写的方法,这个方法获得当前登陆用户的信息,并且查出当前客户的消费额,判断客户是否符合了当前的客户等级提升条件,当然,事先要先新建好各个客户的等级,我这儿的客户等级是事先新建好,并且在后台知道了他的客户ID,然后在这儿判断的并提升的,至于如何发送自定义邮件,参考http://blog.csdn.net/shangxiaoxue/article/details/7835895,最后测试,实现了客户等级的自动提升,配合客户等级的价格规则,就可以做到一套客户等级的优惠了,这个客户等级价格优惠规则,下次有空再贴出来。

......不知道怎么上传自己的代码包。。。有需要的留言讲一下吧。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息