三、
后台确认收货的bug
还有一种情况,是顾客通知我们货物已收到了,由我们在后台进行收货确认
设置(点击“已
收货”按钮)这个时候,客户的
积分还是没有增加,因此我们还要修改后台
管理的
程序。
我们找到后台“
订单信息”的
页面为admin/order.php?act=info&order_id=xxx,对应的
模板是admin下面的templates/order_info.htm,从order_info.htm我们可以查到,“已收货”的按钮
是如下语句:
因此,在/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积分困扰的人有一些帮助,也算自己的一点点贡献吧。