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

如何将PrestaShop 1.6制造商Logo导入至PrestaShop 1.7?

好的,我来帮你搞定制造商Logo的导入问题!你的现有代码已经能同步基本信息,但Logo是文件资源,WebService不会把图片内容包含在JSON响应里,所以我们需要主动从PS1.6服务器下载Logo,再上传到PS1.7。下面是具体的实现方案和修改后的代码:

核心思路

PrestaShop 1.6默认将制造商Logo存储在站点的img/m/目录下,命名规则为{制造商ID}.jpg(比如ID为3的制造商Logo就是3.jpg)。我们需要:

  1. 构造PS1.6的Logo完整URL
  2. 下载Logo到本地临时文件
  3. 利用PS1.7的Manufacturer类方法将Logo保存到新站点

修改后的完整代码

// 替换成你的PrestaShop 1.6站点域名(注意结尾不要加斜杠)
$ps16Domain = 'http://your-ps16-site.com';

$params = [ 'resource' => 'manufacturers', 'contentType' => 'JSON' ];
$ps16manufacturers = json_decode($this->ps16Client->get($params))->manufacturers;

foreach($ps16manufacturers as $ps16manufacturer) {
    $params = [ 'resource' => 'manufacturers', 'contentType' => 'JSON', 'id' => $ps16manufacturer->id ];
    $ps16manufacturersObject = json_decode($this->ps16Client->get($params), true)['manufacturer'];
    
    $ps17Manufacturer = new \Manufacturer();
    $ps17Manufacturer->hydrate($ps16manufacturersObject, \Configuration::get('PS_LANG_DEFAULT'));
    $ps17Manufacturer->force_id = true;
    
    // 处理Logo导入
    $logoUrl = $ps16Domain . '/img/m/' . $ps16manufacturer->id . '.jpg';
    // 尝试下载Logo,@符号用于屏蔽图片不存在时的警告
    $logoContent = @file_get_contents($logoUrl);
    if ($logoContent !== false) {
        // 创建临时文件存储Logo内容
        $tmpFilePath = tempnam(sys_get_temp_dir(), 'ps_manufacturer_logo');
        file_put_contents($tmpFilePath, $logoContent);
        
        // 模拟$_FILES数组结构,适配PS1.7的saveImage方法要求
        $file = [
            'name' => $ps16manufacturer->id . '.jpg',
            'type' => 'image/jpeg',
            'tmp_name' => $tmpFilePath,
            'error' => 0,
            'size' => filesize($tmpFilePath)
        ];
        
        // 保存Logo到PS1.7站点
        $ps17Manufacturer->saveImage($file);
        // 清理临时文件,避免占用服务器空间
        unlink($tmpFilePath);
    }
    
    $ps17Manufacturer->add(false);
}

关键细节说明

  • Logo路径调整:如果你的PS1.6站点Logo使用了其他格式(比如.png)或者存储路径不同(比如启用了图片重命名功能),需要对应修改$logoUrl的构造逻辑。
  • 权限问题:确保PS1.7站点的img/m/目录具备写入权限,否则Logo无法成功保存。
  • 替代下载方式:如果你的服务器禁用了file_get_contents,可以改用cURL来下载图片,示例代码如下:
function downloadLogo($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $content = curl_exec($ch);
    curl_close($ch);
    return $content;
}

// 替换原来的$logoContent = @file_get_contents($logoUrl);
$logoContent = downloadLogo($logoUrl);
  • 错误日志优化:如果需要更严谨的错误记录,可以去掉file_get_contents前的@符号,添加try-catch块来捕获异常并写入日志。

内容的提问来源于stack exchange,提问作者JarsOfJam-Scheduler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:17:30