zencart订单号默认是从0开始的,这样给客户一你网站是新站没什么可信度的感觉,虽然可以通过后台将开始号码改为自己的指定值开始,但是还是不够个性,不够人性化。今天介绍一种将订单号改为前缀+时间+随机数格式
这篇文章参考zencart中文社区,并在其基础上做了修改
方案介绍
方案一:增加非数字前缀 (我原来的修改方式)
这个需要修改数据表,而且zencart有很多文件将order_id强制整型了,必须修正,代价太高修改文件太多不可取
方案二:4位年+月+日+时+分+秒+4位随机数 (我原来的修改方式)
由于32位系统整型最大数为2147483647,明显这种格式超出范围了,32位系统不兼容不可取
方案三:2年+2月+2日+2时+2位递增数 (推荐)
缺点:当每小时内订单超过100单时,会订单重复 (这个缺点可忽略不计了,你有本事每小时产生100订单,完全可以挑选64位系统然后再补充递增数或者随机数)
效果图
修改方法
2.打开includes\classes\order.php,查找
1 | function create( $zf_ot_modules , $zf_mode = 2) { |
其上增加
5 | function get_timezone_offset() { |
6 | $origin_tz = 'America/New_York' ; |
7 | $remote_tz =date_default_timezone_get(); |
8 | $origin_dtz = new DateTimeZone( $origin_tz ); |
9 | $remote_dtz = new DateTimeZone( $remote_tz ); |
10 | $origin_dt = new DateTime( "now" , $origin_dtz ); |
11 | $remote_dt = new DateTime( "now" , $remote_dtz ); |
12 | $offset = $origin_dtz ->getOffset( $origin_dt ) - $remote_dtz ->getOffset( $remote_dt ); |
19 | function create_order_number(){ |
21 | $time =time()+ $this ->get_timezone_offset(); |
22 | $order_prefix = date ( 'ymdH' ); |
23 | $check = $db ->Execute( "SELECT orders_id FROM " .TABLE_ORDERS. " WHERE orders_id like '" . $order_prefix . "%' ORDER BY orders_id DESC LIMIT 1" ); |
24 | $order_number = $check ->fields[ 'orders_id' ] ? $check ->fields[ 'orders_id' ]+1 : $order_prefix . '01' ; |
然后,其下增加
1 | $order_number = $this ->create_order_number(); |
查找
1 | if ( $_SESSION [ 'shipping' ] == 'free_free' ) { |
2 | $this ->info[ 'shipping_module_code' ] = $_SESSION [ 'shipping' ]; |
其下的$sql_data_array增加orders_id键值内容
1 | $sql_data_array = array ( |
2 | 'orders_id' => $order_number , |
查找
1 | $insert_id = $db ->Insert_ID(); |
修改为
1 | $insert_id = $order_number ; |
本人测试时zencart1.5.1修改样本
随机日志
评论 共8条 (RSS 2.0) 发表评论
博主,我把你的文件覆盖我到我的网站,点击订单编辑出现 错误: 订单不存在. LN_20130612153635_1111,而我在数据库看,在数据库中是有订单号的,这是怎么回事?
当时考虑的简单,好多地方order_id被强制为整形数据
我也是订单编辑出现 错误: 订单不存在 那要怎么修改呢
已更新
已修正bug
你好,我装了你这个之后,貌似顾客都无法完成付款,而且订单状态出现异常,比如,顾客下单后本来状态是待处理-pending状态,结果之前的全部订单状态也都变成pending了(我是后面装的,不是网站一上线装的),然后顾客再下单,订单状态是declined, 之前的一批也都变成declined了。博主能不能帮忙下怎么解决啊,或者怎么卸载这个插件啊?谢谢先。。。
博主,我也出现这问题,还有貌似用rp通道,参数传过去出错。
citizen forma