解决ecshop当前订单发货数量不能超出订单商品数量
2016-09-07 22:02 来源:www.chinab4c.com 作者:ecshop专家
chinab4c接手了一个ecshop2.7.3版本的商城,发现后台发货时无法修改发货状态,然后查看库存发现没有缺货。于是开始追踪错误。
“此单发货数量不能超出订单商品数量”提示的是这些文字,所以我先找到了languages/zh_cn/admin/order.php的语言配置文件。
第74行:$_LANG['act_ship_num'] = '此单发货数量不能超出订单商品数量';
查找调用此全局变量的页面,果然,对应的admin/order.php文件。
分析ecshop模板文件,order_delivery_info.htm
{foreach from=$goods.package_goods_list item=package}
<tr>
<td>-- <a href="../goods.php?id={$package.goods_id}" target="_blank">{$package.goods_name}</a></td>
<td>{$package.goods_sn}</td>
<td>{$package.product_sn}</td>
<td>{$package.goods_attr_str}</td>
{if $suppliers_list neq 0} //www.zuimoban.com
<td><div align="right">{$suppliers_name[$package.suppliers_id]|default:$lang.restaurant}</div></td>
{/if}
<td><div align="right">{$package.storage}</div></td>
<td><div align="right">{$package.order_send_number}</div></td>
<td><div align="right">{$package.sended}</div></td>
<td><div align="right"><input name="send_number[{$goods.rec_id}][{$package.g_p}]" type="text" id="send_number_{$goods.rec_id}_{$package.g_p}" value="{$package.send}" size="10" maxlength="11" {$package.readonly}/></div></td>
</tr>
{/foreach}
将
send_number[{$goods.rec_id}][{$package.g_p}]
数组通过form表单传递到order.php?act=operate_post动作下。这个数组蛮别致的,个人理解是用来区分多个商品的信息,以免商品订单出现混淆。
追踪到order.php下的act=operate_post下,
/*------------------------------------------------------ */
//-- 操作订单状态(处理批量提交)
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'batch_operate_post')
{
/* 检查权限 */
admin_priv('order_os_edit');
/* 取得参数 */
$order_id = $_REQUEST['order_id']; // 订单id(逗号格开的多个订单id)
$operation = $_REQUEST['operation']; // 订单操作
$action_note= $_REQUEST['action_note']; // 操作备注
$order_id_list = explode(',', $order_id);
/* 初始化处理的订单sn */
$sn_list = array();
$sn_not_list = array();
好吧 一直往下分析……头晕眼花中终于找到了可疑目标
/* 发货数量与总量不符 */
if (!isset($value['package_goods_list']) || !is_array($value['package_goods_list']))
{
$sended = order_delivery_num($order_id, $value['goods_id'], $value['product_id']);
//echo $sended."<br>";
//echo $send_number[$value['rec_id']].'<br>';
//print_r($value); //www.zuimoban.com
if (($value['storage'] - $sended - $send_number[$value['rec_id']]) < 0)
{
/* 操作失败 */
$links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=info&order_id=' . $order_id);
sys_msg($_LANG['act_ship_num'], 1, $links);
}
}
else
{
/* 超值礼包 */
foreach ($goods_list[$key]['package_goods_list'] as $pg_key => $pg_value)
{
if (($pg_value['order_send_number'] - $pg_value['sended'] - $send_number[$value['rec_id']][$pg_value['g_p']]) < 0)
{
/* 操作失败 */
$links[] = array('text' => $_LANG['order_info'], 'href' => 'order.php?act=info&order_id=' . $order_id);
sys_msg($_LANG['act_ship_num'], 1, $links);
}
}
}
调试后发现数组$value中显示库存的数组id并非['goods_number']字段,而是['storage']。完结
(责任编辑:chinab4c) |
最近更新
常用插件
- ecshop2.7.1邮件发送插件
ecshop2.7.1邮件发送插件:该插件主要的开发思想是源于ecshop短信发送系统...
- ecshop二次开发商品购买增
图片1香...
- ecshop最小购买数量控制插
ecshop最小购买数量控制插件,这个插件主要是为我们提供一个十分方便...
- ecshop没登陆情况下订单查
ecshop没登陆情况下订单查询插件,主要是针对ecshop在没有登陆的情况下...
- ecshop2.7.2生成虚拟订单2.
以前我们开发过ecshop下的虚拟订单,就是客户在访问的时候,会自动生...
ecshop热门问答
ecshop热门资料
ecshop手机中国
ecshop会员价格
ecshopDISCUZ论坛
修改最土注册
ecshop还是
ecshop中秋月饼
ecshop签订
ecshop自动刷新
ecshop开发项目
ecshop转移
ecshop手机辐射
ecshop盗链接
ecshop吸引力
ecshop中文名
ecshop独立服务器
ecshop库文件
mysql版本
ecshop小刀
ecshoptoken
ecshop订单状态查询
ecshop郑州俺购网
ecshop服务端
ecshoptxt
ecshop批发功能
ecshop增删改
ecshop在线申请
ecshop地方的
ecshop文章列表页
ecmall筛选
ecshop游戏