Prestashop 1.6 订单号序列按时间段重置
Prestashop 1.6 Order Number sequence reset per time period
概要
我是 运行 我的电子商务商店,使用 Prestashop 1.6。我已经根据 ps_orders.ps_id_order
使用 this answer 作为指南将我的订单号重新配置为格式 SO/2018/000001
。使用此块更新 override/classes/PaymentModule.php
:
$oNum = str_pad($order->id, 6, '0', STR_PAD_LEFT);
$oYear = substr(date(Y),0,4);
$order->reference = "SO/$oYear/$oNum";
$order->update();
然后我使用以下查询来更新集合确定下一个 id_order
:
ALTER TABLE ps_orders AUTO_INCREMENT = 10
这使得我的 reference
比定义的字段长,所以我也不得不调整 /override/class/Order.php
中的定义:
'reference' => array('type' => self::TYPE_STRING, 'size' => 14),
在/override/class/OrderPayment.php
中:
'order_reference' => array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 14),
完成所有这些后,我的订单号已按我想要的方式格式化,但并不完全符合我的要求。
期望的结果
我不想使用 ps_orders
table 的关键索引字段作为我的订单号的基础,而是使用每年重置的单独序列。类似于 OrderInvoiceCore
class 使用 number
字段根据后台设置的 Invoice Options
生成实际发票编号。
请多多指教
实现这一预期结果的最佳方式是什么?我在想,向 OrderCore
class 添加一个序列,然后用它来生成我的订单参考号来代替 ps_orders.id_order
就可以了。如果这是我的最佳解决方案,我该如何实施?
您可以在生成参考时获取当年的订单数并对其加一。
$nextid = (int)Db::getInstance()->ExecuteS("SELECT count(`id_order`) FROM `"._DB_PREFIX_."orders` WHERE `date_add` > '".date('Y')."-01-01'") + 1;
我会通过将 Order class 中的添加函数覆盖为类似以下内容来实现:
public function add($autodate = true, $null_values = true)
{
$nextid = Db::getInstance()->ExecuteS("SELECT count(`id_order`) FROM `__DB_PREFIX__orders` WHERE `date_add` > '".date('Y')."-01-01'") + 1;
$this->reference = "SO/".date('Y')."/".str_pad($nextid, 6, '0', STR_PAD_LEFT);
parent::add($autodate, $null_values);
}
概要
我是 运行 我的电子商务商店,使用 Prestashop 1.6。我已经根据 ps_orders.ps_id_order
使用 this answer 作为指南将我的订单号重新配置为格式 SO/2018/000001
。使用此块更新 override/classes/PaymentModule.php
:
$oNum = str_pad($order->id, 6, '0', STR_PAD_LEFT);
$oYear = substr(date(Y),0,4);
$order->reference = "SO/$oYear/$oNum";
$order->update();
然后我使用以下查询来更新集合确定下一个 id_order
:
ALTER TABLE ps_orders AUTO_INCREMENT = 10
这使得我的 reference
比定义的字段长,所以我也不得不调整 /override/class/Order.php
中的定义:
'reference' => array('type' => self::TYPE_STRING, 'size' => 14),
在/override/class/OrderPayment.php
中:
'order_reference' => array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 14),
完成所有这些后,我的订单号已按我想要的方式格式化,但并不完全符合我的要求。
期望的结果
我不想使用 ps_orders
table 的关键索引字段作为我的订单号的基础,而是使用每年重置的单独序列。类似于 OrderInvoiceCore
class 使用 number
字段根据后台设置的 Invoice Options
生成实际发票编号。
请多多指教
实现这一预期结果的最佳方式是什么?我在想,向 OrderCore
class 添加一个序列,然后用它来生成我的订单参考号来代替 ps_orders.id_order
就可以了。如果这是我的最佳解决方案,我该如何实施?
您可以在生成参考时获取当年的订单数并对其加一。
$nextid = (int)Db::getInstance()->ExecuteS("SELECT count(`id_order`) FROM `"._DB_PREFIX_."orders` WHERE `date_add` > '".date('Y')."-01-01'") + 1;
我会通过将 Order class 中的添加函数覆盖为类似以下内容来实现:
public function add($autodate = true, $null_values = true)
{
$nextid = Db::getInstance()->ExecuteS("SELECT count(`id_order`) FROM `__DB_PREFIX__orders` WHERE `date_add` > '".date('Y')."-01-01'") + 1;
$this->reference = "SO/".date('Y')."/".str_pad($nextid, 6, '0', STR_PAD_LEFT);
parent::add($autodate, $null_values);
}