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

Opencart自动导入产品模块调用addProduct报Illegal string offset错误

错误原因及解决方案

核心错误原因

你调用addProduct方法的入参结构不符合Opencart系统要求,触发了两个层面的错误:

  1. 入参层级错误:你构造的$products_data_array是外层索引数组,每个元素才是单条产品的关联数组,但Opencart自带的addProduct方法每次仅接收单条产品的关联数组作为参数,你直接把外层数组传入后,模型无法读取到model、price等顶层键,所以触发了大量Illegal string offset警告。
  2. 产品描述结构错误:Opencart支持多语言,product_description字段需要先以语言ID为第一层键,再嵌套名称、描述等字段,你当前的结构缺失了语言ID层,对应报错里第12行的product_description偏移错误。

具体修复步骤

步骤1:修正入参调用方式

如果是单条测试,直接取数组的第一个元素传入即可:

$this->model_catalog_product->addProduct($products_data_array[0]);

如果后续要批量导入多条产品,循环遍历外层数组逐条调用即可:

foreach ($products_data_array as $single_product) {
    $this->model_catalog_product->addProduct($single_product);
}

步骤2:修正产品描述的多语言结构

先获取系统默认语言ID,再将描述字段嵌套到对应语言ID的数组下:

// 先获取后台配置的默认语言ID
$language_id = (int)$this->config->get('config_language_id');

// 构造product_description字段的正确结构
'product_description' => [
    $language_id => [
        'name' => strval($results['product_CODE'][$i]),
        'meta_description' => strval($results['DESCR'][$i]),
        'meta_keyword' => strval($results['product_CODE'][$i]),
        'description' => strval($results['DESCR'][$i]),
        'tag' => strval($results['CODCODE'][$i]),
    ]
],

步骤3:修正其他字段的赋值规则

  • 品牌字段:addProduct不会自动创建品牌,你需要先根据$brand名称查询manufacturer表获取对应ID,赋值给manufacturer_id,无对应品牌要先调用addManufacturer创建后再取值,仅传manufacturer名称无效
  • 分类字段:你当前传的是分类名称,需要先查询category_description表获取对应分类ID,将ID数组赋值给product_category字段,仅传category名称无效
  • 数值型必填字段:quantity、tax_class_id、minimum、subtract等字段不要留空字符串,需赋值为有效值,比如没有特殊需求可默认填0或1
  • 日期字段:date_available可默认赋值为date('Y-m-d'),避免日期字段格式错误

注意事项

不要修改Opencart自带的系统模型文件,不仅容易引入额外bug,后续系统升级还会被覆盖,本次问题完全是入参结构错误导致,和系统模型无关。


内容的提问来源于stack exchange,提问作者devblack.exe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:18:01