zen-cart网站,模版,采集,二次开发

首页 » ZenCart » ZenCart教程 » 阅读文章

[改进版][3月31日修正]ZenCart修改订单号个性格式(2年+2月+2日+2时+2位递增数)

2014-03-31 16:27 70087 8 发表评论
标签:


zencart订单号默认是从0开始的,这样给客户一你网站是新站没什么可信度的感觉,虽然可以通过后台将开始号码改为自己的指定值开始,但是还是不够个性,不够人性化。今天介绍一种将订单号改为前缀+时间+随机数格式

这篇文章参考zencart中文社区,并在其基础上做了修改

方案介绍

方案一:增加非数字前缀 (我原来的修改方式)

这个需要修改数据表,而且zencart有很多文件将order_id强制整型了,必须修正,代价太高修改文件太多不可取

方案二:4位年+月+日+时+分+秒+4位随机数 (我原来的修改方式)

由于32位系统整型最大数为2147483647,明显这种格式超出范围了,32位系统不兼容不可取

方案三:2年+2月+2日+2时+2位递增数 (推荐)

缺点:当每小时内订单超过100单时,会订单重复 (这个缺点可忽略不计了,你有本事每小时产生100订单,完全可以挑选64位系统然后再补充递增数或者随机数)

效果图

修改方法

2.打开includes\classes\order.php,查找

function create($zf_ot_modules, $zf_mode = 2) {
  global $db;

其上增加

  /**
   * [get_timezone_offset 当前时区与美国时区时间差]
   * 作用:统一订单时区,避免网站迁移后空间时区问题造成的订单冲突
   */
  function get_timezone_offset() {
    $origin_tz='America/New_York';  //中国时区 Asia/Shanghai
    $remote_tz=date_default_timezone_get();
      $origin_dtz = new DateTimeZone($origin_tz);
      $remote_dtz = new DateTimeZone($remote_tz);
      $origin_dt = new DateTime("now", $origin_dtz);
      $remote_dt = new DateTime("now", $remote_dtz);
      $offset = $origin_dtz->getOffset($origin_dt) - $remote_dtz->getOffset($remote_dt);
      return $offset;
  }

  /**
   * [create_order_number 生成订单号]
   */
  function create_order_number(){
    global $db;
    $time=time()+$this->get_timezone_offset();
    $order_prefix=date('ymdH');
    $check=$db->Execute("SELECT orders_id FROM ".TABLE_ORDERS." WHERE orders_id like '".$order_prefix."%' ORDER BY  orders_id DESC LIMIT 1");
    $order_number= $check->fields['orders_id'] ? $check->fields['orders_id']+1 : $order_prefix.'01';
    return $order_number;
  }

然后,其下增加

$order_number=$this->create_order_number();

查找

if ($_SESSION['shipping'] == 'free_free') {
  $this->info['shipping_module_code'] = $_SESSION['shipping'];
}

其下的$sql_data_array增加orders_id键值内容

$sql_data_array = array(
                       'orders_id' => $order_number,

查找

$insert_id = $db->Insert_ID();

修改为

$insert_id =$order_number;

本人测试时zencart1.5.1修改样本

随机日志

评论 共8条 (RSS 2.0) 发表评论

  1. 小林 说道:

    博主,我把你的文件覆盖我到我的网站,点击订单编辑出现 错误: 订单不存在. LN_20130612153635_1111,而我在数据库看,在数据库中是有订单号的,这是怎么回事?

  2. pk1989 说道:

    你好,我装了你这个之后,貌似顾客都无法完成付款,而且订单状态出现异常,比如,顾客下单后本来状态是待处理-pending状态,结果之前的全部订单状态也都变成pending了(我是后面装的,不是网站一上线装的),然后顾客再下单,订单状态是declined, 之前的一批也都变成declined了。博主能不能帮忙下怎么解决啊,或者怎么卸载这个插件啊?谢谢先。。。

    • 小林 说道:

      博主,我也出现这问题,还有貌似用rp通道,参数传过去出错。

  3. ecodrive citizen 说道:

    citizen forma

发表评论

  • 
  • 插入代码

联系我 Contact Me

回到页首