Prestashop创建商品图片 后台正常显示但前台首页无法展示
Prestashop 自定义商品导入后前台图片不显示修复
问题根因
后台图片正常、前台加载失败的核心问题出在图片生成逻辑:
- 调用
AdminImportControllerCore::copyImg()时第5个参数传了false,这个参数控制是否生成前台各场景用到的多尺寸缩略图,传false时只会上传原始图片,不会生成首页商品位、列表页、详情页需要的对应尺寸裁剪图,前台读不到对应尺寸文件就会显示图片破损。 - 两个容易遗漏的兼容点:
- 新建的Image对象没有绑定店铺ID,开启多店铺模式时前台会过滤掉未关联当前店铺的图片
- 图片上传后没有清空Smarty缓存和图片缓存,旧的错误缓存会导致前台读不到新上传的封面图
修复代码
直接替换原有逻辑即可,完整可运行代码如下:
$xml = simplexml_load_file('php://input'); $product = new Product($xml->id); $product->category = [2, 7]; $product->id_category_default = (int)$xml->id_category_default; $product->name = $xml->name; $product->price = $xml->price; $product->id_tax_rules_group = (int)$xml->id_tax_rules_group; $product->ean13 = $xml->ean13; $product->description = $xml->description; $product->description_short = $xml->description_short; $product->reference = $xml->reference; $product->weight = $xml->weight; $product->height = $xml->height; $product->width = $xml->width; $product->depth = $xml->depth; $product->indexed = 1; $product->active = true; $product->save(); $product->updateCategories($product->category); $default_attr_id = $product->getDefaultIdProductAttribute(); StockAvailable::setQuantity($product->id, $default_attr_id, $xml->quantity); $image = new Image(); $image->id_product = $product->id; $image->position = Image::getHighestPosition($product->id) + 1; $image->cover = true; // 补充店铺ID关联,兼容多店铺场景 $image->id_shop = (int)Context::getContext()->shop->id; $image->save(); // 最后一个参数改为true,自动生成全尺寸缩略图 $copy_status = AdminImportControllerCore::copyImg( (int)$product->id, (int)$image->id, $xml->urlImage, 'products', true ); // 兜底生成首页专用缩略图,避免内部方法生成遗漏 if ($copy_status) { $image->clearCache(); $base_img_path = _PS_PROD_IMG_DIR_.$image->getExistingImgPath().'.jpg'; ImageManager::resize( $base_img_path, _PS_PROD_IMG_DIR_.$image->getExistingImgPath().'-home_default.jpg', (int)Configuration::get('HOME_DEFAULT_WIDTH'), (int)Configuration::get('HOME_DEFAULT_HEIGHT') ); } // 清空首页缓存,避免旧缓存影响 Tools::clearCache(Context::getContext()->smarty, null, null, 'index');
验证步骤
- 部署新代码后重新执行商品导入
- 进入后台「高级参数 > 性能」页面点击清空全部缓存
- 前台按Ctrl+F5强制刷新页面,即可看到商品图片正常展示
- 如果还是异常,可以直接到服务器
/img/p/对应商品的图片目录下,检查是否存在[图片ID]-home_default.jpg格式的文件,存在则说明缩略图生成逻辑正常。
内容的提问来源于stack exchange,提问作者Baptiste L
相关产品推荐
相关产品推荐

