ecshop积分系统修改小记(2)

2016-07-07 15:34 来源:www.chinab4c.com 作者:ecshop专家

三、后台确认收货的bug

还有一种情况,是顾客通知我们货物已收到了,由我们在后台进行收货确认设置(点击“已
收货”按钮)这个时候,客户的积分还是没有增加,因此我们还要修改后台管理的程序。
我们找到后台“订单信息”的页面为admin/order.php?act=info&order_id=xxx,对应的模板
是admin下面的templates/order_info.htm,从order_info.htm我们可以查到,“已收货”的按钮
是如下语句:
<input name="receive" type="submit" value="{$lang.op_receive}" class="button" />
因此,在/admin/order.php里搜索receive,找到2627行的收货确认操作的程序段。即
'receive' == $operation下面这一段,然后在这段程序的最后(即"}"之前一行)加上以下语句:
//add by iamstar
log_account_change($order['user_id'], 0, 0, $order['integral'], 0,
sprintf($_LANG['order_gift_integral'], $order['order_sn']));
也就是说我们点击“已收货”按钮时,也能够自动帮客户增加积分了。
可是在反复测试一个购物流程时,当点击“未发货”按钮以收回之前的收货确认时,却有提
示程序出错(不知你们有没有,反正我有,是在order.php的2611行),经查,是以下这一段出错:
$integral = integral_to_give($order);
当我们替客户确认收货却要反悔时,点击“未发货”,理应收回之前所赠送的积分的,因此
要对$integral赋值,再执行下一行的操作:
log_account_change($order['user_id'], 0, 0, (-1) * $integral, (-1) * $integral,
sprintf($_LANG['return_order_gift_integral'], $order['order_sn']));
也许是赋值有问题,因此将出错的赋值语句注释掉,改为如下,就不会有错误提示了:
$integral=intval($order['integral']);
因为我只需要减掉相应的等级积分,因此减分操作我也改了一下:
log_account_change($order['user_id'], 0, 0, (-1) * $integral, 0,
sprintf($_LANG['return_order_gift_integral'], $order['order_sn']));
即将第五个参数(对应pay_points)的加减值置零,就不会有任何操作了。关于
log_account_change()函数的参数结构可以自己去 /includes/lib_common.php里查找,这里就
不多说了。

五、拾遗

1) 发现提交订单的时候后台“会员帐户变动明细”会记录“支付订单 xxxxxxxxxxxx”,而且
这个地方无端端会相应扣掉消费积分帐户。这可不是我想要的,在flow.php大约1540行处
注释掉下面这一段即可:
if ($order['user_id'] > 0 && $order['integral'] > 0)
{
log_account_change($order['user_id'], 0, 0, 0, $order['integral'] *
(-1), sprintf($_LANG['pay_order'], $order['order_sn']));
}

这样在提交订单的时候就不会记录一条无谓的日志了。

2) 我们发现系统后台“会员帐户变动明细”会在管理员点击“发货”操作时开始赠送积分,
只是这里的赠送额都为0,但我觉得不应该在发货的时候就赠送吧?总得让客户收到货物
之后,因此这里我把它取消掉,免得心烦。在/admin/order.php的约2549行处,注释掉
下面这一段:
/* 计算并发放积分 */
$integral = integral_to_give($order);
log_account_change($order['user_id'], 0, 0, $integral, $integral,
sprintf($_LANG['order_gift_integral'], $order['order_sn']));
3) 退货的操作也要减积分,但我的应用没有消费积分可减,因此order.php的大约2762行处
的log_account_change操作我把减消费积分的操作置零:
log_account_change($order['user_id'], 0, 0, (-1) * $integral, 0,
sprintf($_LANG['return_order_gift_integral'], $order['order_sn']));
上面的一行$integral = integral_to_give($order); 还是会引发错误,因此象在前面
一样改成:
$integral=intval($order['integral']);
3100行的return_user_surplus_integral_bonus函数会在退货时给顾客补回相应的消费
积分,我不需要因此将这一整段注释掉:
if ($order['user_id'] > 0 && $order['integral'] > 0)
{
log_account_change($order['user_id'], 0, 0, 0, $order['integral'],
sprintf($GLOBALS['_LANG'] ['return_order_integral'], $order['order_sn']));
}

到这里积分的问题就基本修改完毕了,相信看完这篇东东的人都能够根据自己的需要做出
修改。我把相应的修改过的文件共享给大家参考(http://www.paiban.com/sample.rar),
但不建议大家直接覆盖,因为我这些文件可能还做了其它的修改,而且我也不知道您的程序文件
有没有过别的其它修改。大家在sample搜索iamstar找到修改过的地方,对照自己的程序修改即可。
以前碰到什么问题总是google,但这个问题总是找不到解决的方法(包括官网),所以自己尝
试修改了一下,文章胡乱写,也比较烦琐,先致歉。如果文章有写错的地方,也望来信指正。希望
这篇东西能够对受到ecshop积分困扰的人有一些帮助,也算自己的一点点贡献吧。

回答:
大哥,很感谢!现在ecshop不知道是否还在开发着,唉

很好用,今天刚好在做积分这个,我要实现的的是使用红包的时候不送积分,还没看你的代码,估计应该会对我用帮助,顶一个先

很有帮助~~收藏下了~~~~