You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCart 3.0.3.6购物车重量异常:0重量显示150克求助

OpenCart 3.0.3.6 (rs.1) 购物车重量异常:0/未设置重量商品显示150克的排查与修复

问题根源

这个150克的异常值并非来自你排查的library/cart或checkout控制器,而是大概率来自商品模型的兜底赋值、重量转换类的默认逻辑,或是第三方扩展的强制设置。OpenCart原生不会给无重量商品默认设150克,这个数值应该是自定义修改或扩展引入的。

触发代码位置

你漏查了几个核心文件:

  • catalog/model/catalog/product.php:获取商品详情的核心模型,若此处存在对product_weight的兜底判断(比如重量为0/null时强制设为150),会直接导致购物车读取到错误值
  • system/library/weight.php:重量转换工具类,部分场景下如果源重量无效,会返回预设的默认值
  • system/library/cart/cart.php:虽然你排查过,但可能没注意到getProducts()循环中对商品重量的二次处理逻辑
  • 第三方物流/购物车扩展:部分扩展会强制给无重量商品设置默认重量,用于运费计算

修复步骤

1. 检查商品模型的兜底赋值

打开catalog/model/catalog/product.php,找到getProduct()方法,搜索是否有类似代码:

if (empty($product['weight']) || $product['weight'] == 0) {
    $product['weight'] = 150;
}

如果存在,直接删除这段代码,或者将150改为0。

2. 排查重量转换类的异常逻辑

打开system/library/weight.php,查看convert()方法,是否有如下判断:

public function convert($value, $from, $to) {
    // ... 其他转换代码
    if (!$value) {
        return 150; // 这里是异常源头
    }
    // ... 其他代码
}

将返回值改为0,或者直接删除这个条件分支。

3. 检查购物车类的商品处理逻辑

重新查看system/library/cart/cart.php的getProducts()方法,确认循环中是否有对重量的强制赋值:

foreach ($this->session->data['cart'] as $key => $quantity) {
    // ... 获取商品数据
    if (!$product['weight']) {
        $product['weight'] = 150;
    }
    // ... 组装购物车商品数据
}

删除或修改该赋值逻辑即可。

4. 排查第三方扩展与系统设置

  • 进入后台系统→设置→编辑商店→本地,检查“重量单位”的默认配置,确认无异常数值
  • 禁用所有第三方物流、购物车相关扩展,测试是否恢复正常,逐步排查是哪个扩展导致的问题

验证方法

修改完成后,添加一个重量设为0或未填写重量的商品到购物车,刷新页面查看购物车重量显示是否为0(或符合模板的无重量展示逻辑)。

内容的提问来源于stack exchange,提问作者конструктор

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:12:41