如何将订单参考更改为数字参考

时间:2014-01-03 05:50:36

标签: prestashop

使用新版本的Prestashop 1.5.2.0。我想将订单参考(字母)更改为字母数字值。我尝试在论坛中搜索并看到这个论坛。不幸的是它不适合我。

任何人都可以使用解决方案将订单参考(字母)更改为整个应用程序中的字母数字值。

我的意思是“AQMKATRQG”到“LD1001”并将它增加到“LD1002”我想将Order参考(字母)改为字母数字值。我尝试在论坛中搜索并看到这个论坛。不幸的是它不适合我。

任何人都可以使用解决方案将订单参考(字母)更改为整个应用程序中的字母数字值。

我的意思是“AQMKATRQG”到“LD1001”并将其增加到“LD1002”

2 个答案:

答案 0 :(得分:15)

在PrestaShop 1.6中(经过测试并确认在v1.6.0.14中工作),您可以通过以下方法完成此操作。

  1. 将文件/classes/PaymentModule.php复制/override/classes/PaymentModule.php

  2. 编辑文件/override/classes/PaymentModule.php,如下所示。

  3. 第337-341行是一个代码块,应该是这样的:

    if (!result)
    {
      PrestaShopLogger::addLog('PaymentModule::validateOrder - Order cannot be created',
        3, null, 'Cart', (int)$id_cart, true);
      throw new PrestaShopException('Can\'t save Order');
    }
    

    在该代码块之后,立即插入以下两行代码:

    $order->reference = str_pad($order->id, 9, '0', STR_PAD_LEFT);
    $order->update();
    
    1. 删除文件/cache/class_index.php,以便Prestashop自动重新创建此文件,同时考虑新的覆盖文件。

    2. 可以使用phpMyAdmin等工具手动更新PrestaShop数据库中的所有现有记录,以手动使用数字参考。

    3. 我认为如果与PrestaShop v1.5的步骤不相同,步骤将非常相似,但此时我还没有使用PrestaShop v1.5测试此解决方案。如果有人发现此解决方案适用于v1.5,也许他们可以在评论中确认这一点。谢谢。

答案 1 :(得分:1)

上述解决方案基本上是正确的,但是如果你可以保留它,你真的应该避免修改任何核心代码。在我对prestashop或我的主题引擎应用任何升级后,我将所有的mod放在一个特殊的文件夹中,然后我逐个上传修改(在每个修改后)。

这些说明适用于1.6.x用户 - 但可以在1.5.x上运行 - 我没有要测试的代码。

1)创建一个名为order.php的文件,并将下面的代码放在该文件中

2)接下来,将文件上传到/override/classes/order/order.php

3)导航到/ cache文件夹并删除文件class_index.php(它将在下一页请求时重新创建)

<?php
/*
 *  RETURN ORDER REFERENCE TO SEQUENTIAL NUMERIC VALUE
 *
 *  2016 PrestaShop v1.6.1.x
 *  Override by obewanz
 *
 *  You can use the following SQL query to change the starting order no if desired
 *  where the number 101 is the next desired order number:
 *  ALTER TABLE `ps_orders` AUTO_INCREMENT = 101
 *  --------------------------------------------
 *  OPTION: (ALL NUMERIC)
 *  str_pad((int)$last_id + 1, 9, '000000000', STR_PAD_LEFT);
 *  OPTION SET TO ORIG 1.5.x STYLE REFERENCE NUMBERS: 
 *  str_pad((int)$last_id + 1, 6, '000000', STR_PAD_LEFT);
 */

Class Order extends OrderCore {
  public static function generateReference() {
    $last_id = Db::getInstance()->getValue('SELECT MAX(id_order)
                                            FROM '._DB_PREFIX_.'orders');
    return str_pad((int)$last_id + 1, 9, 'NR-000000', STR_PAD_LEFT);
  }
}

你现在应该完成,你的下一个订单将有一个类似的参考:NR-000101

代码注释中的第二个“OPTION”返回的顺序引用号基本上是PS 1.5.x的那个 - (我在一个旧文件中引用了它。)

我还在代码注释中包含了相应的SQL语句,以便在需要时设置下一个订单号。