由于最近二次开发的dt系统的是用作钢材交易的,单位都是吨,所以库存要求精确到三位小数,购买的数量也要精确到三位小数。因为网上还是没有资料,没办法,自己改。
下面说方法:
首先得改下数据库 数据表 前缀_mall中
Amount 类型改为 decimal(10,3)
Sales 类型改为 decimal(10,3)
1、管理员、网站会员发布产品库存写入小数
\module\mall\mall.class.php
$post[‘amount’] = intval($post[‘amount’]);58行
改为:$post[‘amount’] = $post[‘amount’];
可以保证写入数据库、会员中心读取的都是带小数的
2、商品详情页面显示支持小数的库存:
\module\mall\Show.inc.php 43行
$amount = number_format($amount, 0, ‘.’, ”);
改为:$amount=$amount
\module\mall\Show.htm.php 37行
$amount = number_format($amount, 0, ‘.’, ”);
改为:$amount=$amount
3、提交订单页面 显示支持小数的购买数量
\module\mall\buy.inc.php
$number = intval($v[‘number’]); 48行
改为:$number = $v[‘number’];
$s1 = isset($s1) ? intval($s1) : 0; 167行
$s2 = isset($s2) ? intval($s2) : 0; 168行
$s3 = isset($s3) ? intval($s3) : 0; 169行
$a = isset($a) ? intval($a) : 1; 170行
修改方法:去掉intval函数
4、template\default\mall\buy.htm
num = parseInt(Dd(‘number_’+itemid).value); 248
maxa = parseInt(Dd(‘amount_’+itemid).value); 249
mina = parseInt(Dd(‘a1_’+itemid).value); 250
这里发现,商品的价格是通过js来计算的,不是通过php,去掉parseInt即可。
同样,购物车也是需要修改的
打开\template\default\mall\cart.htm
num = parseInt(Dd(‘number_’+itemid).value); 168
maxa = parseInt(Dd(‘amount_’+itemid).value);169
mina = parseInt(Dd(‘a1_’+itemid).value);170
去掉parseInt函数
当然,想对应的php文件
\module\mall\cart.inc.php 中
$s1 = isset($s1) ? intval($s1) : 0; 20
$s2 = isset($s2) ? intval($s2) : 0;21
$s3 = isset($s3) ? intval($s3) : 0;22
$a = isset($a) ? intval($a) : 1;23
也需要去掉 intval
至此,发布产品可以带小数,购买产品可以带小数了,购物车也都可以使用了。但是我测试后,还发现了一个问题,就是计算库存及销售数量的时候,还是,数量还是取得整数,而且是四舍五入的。
购买记录是在数据库 前缀_mall_order中的,所以也要把 表中的
Number 类型改为decimal(10,3) 。
因为这个数量其实就是购买的数量,所以以前已经改过了,测试下,完美,客户可以购买带三位小数的产品数量,购买付款后,结合昨天修改的教程,库存马上就减去带三位小数的购买数量。