我使用Prestashop 1.6运行我的电子商务商店。我已使用this answer作为指南,根据SO/2018/000001
将订单号重新配置为ps_orders.ps_id_order
格式。使用此块更新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
表的关键索引字段作为我的订单号的基础,而是想使用一个单独的序列,每年重置一次。类似于OrderInvoiceCore
类使用number
字段根据后台设置的Invoice Options
生成实际发票编号的方式。
实现这个理想结果的最佳方法是什么?我正在考虑向OrderCore
类添加一个序列,并使用它来生成我的订单参考号代替ps_orders.id_order
就可以了。如果这是我个案中的最佳解决方案,我该如何实施?
答案 0 :(得分:1)
您可以在生成参考时获取当年的订单数量并添加一个订单。
$nextid = (int)Db::getInstance()->ExecuteS("SELECT count(`id_order`) FROM `"._DB_PREFIX_."orders` WHERE `date_add` > '".date('Y')."-01-01'") + 1;
我会通过将Order类中的add函数覆盖为:
来实现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);
}