Opencart安装eMarket主题时so_megamenu.php第373行数组偏移访问报错
报错根本原因
错误提示Trying to access array offset on value of type bool说明第373行的$product变量是布尔值(通常是商品查询失败返回的false),不是预期的商品数组,无法读取name下标。
排查步骤
- 定位
$product变量的赋值位置,通常在这段代码上方几行,是调用Opencart商品模型查询指定ID商品得到的结果 - 验证查询传入的商品ID合法性:检查是否传入了不存在、已删除的商品ID,导致查询返回空/
false - 检查eMarket主题自带的so_megamenu模块后台配置:确认是否配置了引用已删除商品的菜单项,尤其是设置了展示单个商品的超级菜单项
解决方法
临时修复(快速消除报错不影响站点运行)
在$product赋值后、第373行之前加非空判断,$product无效时自动填充默认值,修改后代码参考:
// 找到$product变量赋值的代码行,在下方加入这段判断 if (!is_array($product)) { $product = ['name' => '']; $product_link = ''; $product_image = ''; $price = ''; $special = ''; } // 原有的$output数组定义保持不变即可 $output[] = array( 'name' => @unserialize($row['name']), 'content_width' => intval($row['content_width']), 'content_type' => $row['content_type'], 'html' => $html, 'product' => array( 'name' => $product['name'], //line 373 'link' => $product_link, 'image' => $product_image, 'price' => $price, 'special' => $special ), 'categories' => $categories, 'manufactures' => $manufactures, 'subcategory' => $subcategory, 'productlist' => $productlist, 'images' => $images, 'class_menu' => $row['class_menu'], 'submenu' => $this->getSubmenu($row['id']) );
彻底修复
- 登录Opencart后台,进入
扩展->模块->SO Megamenu配置页 - 逐个检查每个菜单项的内容设置,找到设置了商品展示的项,将其中引用的不存在/已删除商品替换为现有合法商品
- 保存配置后清空Opencart全部缓存(包括系统缓存、vqmod/ocmod缓存),刷新前台验证报错是否消失
内容的提问来源于stack exchange,提问作者Vicky Maharjan
相关产品推荐
相关产品推荐

