ecshop积分系统修改小记(1)
2016-07-07 15:17 来源:www.chinab4c.com 作者:ecshop专家
ecshop积分系统修改小记 [iamstar] [9441287@qq.com] 我用的是ecshop 2.51版本,在测试购物流程时发现积分根本无法赠送。也就是说,在 订单里明明说好赠送100个积分的,等整个购物流程结束后客户的积分一点也没有增加,很 多站长都只能通过手工增加解决这个问题。我搜索了一下,似乎2.60也有这个问题,这个 bug一直都没有妥善的修补。 自己动手,丰衣足食,下面我结合我自己的需求把程序的修改过程跟大家交流一下。 一、后台设置: ecshop的积分分两种:等级积分和消费积分。 由于我个人只需要增加用户的等级积分,因此,在“商店设置”的“基本设置”里,我 将“积分换算比例”和“积分支付比例”都设置为0,在“购物流程”里,我还是启用了积分 ,在“是否使用积分”里,我选择了“使用”。 在商品列表的后台设置里,将“积分购买额度”设置为0(不使用消费积分当钱用),然 后在“赠送积分数”里设置为-1(即赠送积分数跟价格一样)。 二、分析修改: 接下来我们要找到记录用户积分的数据库表字段。经查,用户数据表是ecs_users,在这 里,等级积分字段名是rank_points,消费积分是pay_points。由于我个人只需要增加用户的 等级积分,因此我只需让用户完成购物流程后将rank_points的积分递增上去。 这时,我们在提交订单时发现底部已经有提示,“该订单完成后”,可以获得多少多少的 积分,由于我们在后台已经设置了赠送积分数为-1,因此这个积分的数量是和货物的金额相等 的。用膝盖想想也知道,赠送的积分数在提交订单之后,必须要记录在数据库的订单表里,这 样用户确认收货之后,才有依据将积分加到ecs_users表的rank_points中。 经测试,订单表(ecs_order_info)中有integral和integral_money字段,我猜想他们分 别对应等级积分和消费积分(或者是用在此订单中的消费积分所折合的金额)。后来我发现, 提交订单后,订单里所承诺的赠送积分数并没有记录在integral字段里,因此我们要做的第一 件事情就是在提交订单时将承诺赠送积分数记录到ecs_order_info表的integral字段里。 1)改变用户欢迎页的积分含义。 在模板user_clips找到欢迎页的用户积分变量为{$info.integral},然后在user.php的 101行找到info是由函数get_user_default()赋值的。在/includes/lib_clips.php里的582行 我们搜索到这个函数,可以看到info.integral定义为pay_points,这不是我需要的,因此将 此行改为: $info['integral']= $row['rank_points'] . $GLOBALS['_CFG']['integral_name']; 这样在用户欢迎页显示的积分就是等级积分而不是消费积分了。 2)寻找显示承诺积分的变量。 购物的整个流程都是flow.php,我们分析模板flow.dwt,积分变量在发现在它所调用的 Library/order_total.lbi里,打开此文件,我们找到了{$total.will_get_integral}这个 变量,这个就是提交订单前所承诺赠送的积分变量。 3)提交积分变量 有html经验的朋友都知道后台接收的post表单都在<form></form>里,因此我们找到提交 订单的form是在flow.dwt的700行处,可以找到一个</form>。我们在这个</from>上一行添加 一个html语句: <input type="hidden" name="integral2" value="{$total.will_get_integral}" /> 也就是说,我们可以把所找到的积分变量以post方式提交到后台处理。 4)后台处理 上一步完成了积分的提交,我们这里分析flow.php,找到了程序对integral的处理是在 1469行: $order['integral'] = $total['integral']; 程序会把$order['integral']添加到ecs_order_info的integral字段里,可是测试过后 我们发现这里的值都为0,也不去深究,反正将我们提交上来的积分变量赋值给它就行。将 这一行注释掉(在语句前面加//),然后换成: $order['integral'] = intval($_POST['integral2']); 做了这个更改之后,我们测试提交订单,可以发现integral字段里已经有积分数了。 5)增加用户积分 做了以上修改之后,我们正常确定、收款、配货、发货,最后就等用户的确认。我们要 在用户确认时增加用户积分。 我们可以找到用户确认的链接是user.php?act=affirm_received&order_id=xxx 继续跟踪,我们分析user.php文件,搜索affirm_received,找到处理确认的程序段大 约在1036行。顺藤摸瓜,找到affirm_received()函数所在的库文件/includes/lib_transaction.php ,在442行找到了affirm_received()函数。 在445行我们可以看到一个sql语句: $sql = "SELECT user_id, order_sn , order_status, shipping_status, pay_status FROM ".$GLOBALS['ecs']->table('order_info') ." WHERE order_id = '$order_id'"; 这是函数处理收货确认时读取的部分订单字段信息,我们发现没有integral,这很不够 意思。在pay_status字段后加上integral字段,那就可以一起读出来了,修改如下: $sql = "SELECT user_id, order_sn , order_status, shipping_status, pay_status , integral FROM ".$GLOBALS['ecs']->table('order_info') ." WHERE order_id = '$order_id'"; 读取了订单信息之后,我们可以看到函数继续做了“检查订单是否属于该用户”以及“检 查订单”的处理,处理完毕后,我们找到了469行,这里将订单发货状态改为确认收货,我们 看看这一段: $sql = "UPDATE " . $GLOBALS['ecs']->table('order_info') . " SET shipping_status = '" . SS_RECEIVED . "' WHERE order_id = '$order_id'"; if ($GLOBALS['db']->query($sql)) { /* 记录日志 */ order_action($order['order_sn'], $order['order_status'], SS_RECEIVED, $order['pay_status'], '', $GLOBALS['_LANG']['buyer']); return true; } else { die($GLOBALS['db']->errorMsg()); } 这一段是将订单发货状态改成确认收货,看到那个return true了吗?也就是说,如果这个 sql语句执行成功之后,函数将正确返回,否则提示数据库出错信息。到这里,还是跟我们积分 的增加无关,因此最重要的,我们要在这里加上我们自己的数据库操作,将之前读出来的 $order['integral']增加到integral字段里去。我们在return true的上一行加上我们自己的 语句,于是变成: if ($GLOBALS['db']->query($sql)) { /* 记录日志 */ order_action($order['order_sn'], $order['order_status'], SS_RECEIVED, $order['pay_status'], '', $GLOBALS['_LANG']['buyer']); //add by iamstar $_LANG['order_gift_integral'] = '订单 %s 赠送的积分'; log_account_change($order['user_id'], 0, 0, $order['integral'], 0, sprintf($_LANG['order_gift_integral'], $order['order_sn'])); return true; } else { die($GLOBALS['db']->errorMsg()); } 保存文件,然后上传,再测试购物流程,我们可以发现用户确认收货后,等级积分增加了 ,让我们轻呼一声:oh yeah~ |
回答:
可以教教我我吗。联系我一下。QQ100100375 |
最近更新
常用插件
- ecshop快递发货单打印商品
ecshop快递发货单打印商品信息,大家都知道ecshop快递单打印的时候,只能...
- ecshop供应商插件免费下载
ecshop供应商插件免费下载...
- ecshop二次开发售后维修卡
插件介绍: 本插件是用于专门从事电子,信息,软件等售后服务关键比...
- ecshop选择下单时间插件
ecshop选择下单时间插件主要是根据不同的下单配送要求,在ecshop购物车...
- ecshop按分类筛选销售排行
ecshop按分类筛选销售排行...
ecshop热门问答
ecshop热门资料
ecshoprank
ecshopcls_session
ecshop求助
ecshop多个价位
ecshop超商取貨
ecshop管理员密码
ecshop不减
ecshop河南郑州
ecshop支付平台
ecshop网店信息
ecshoppem
ecshop录入品牌
ecshop联系人
ecshop倒计时效果
ecshop360京东模版
ecshop导报
ecshop评论调用
ecshopset
ecshop咖啡色
ecshop字数控制出错
ecshop谢求
ecshop鼠标滑过导航栏特效
ecshopcolor
ecshop星星
ecshop银卡
ecshop消耗
ecshop虚假
ecshop白色
ecshop多店
ecshopnopic