如何在prestashop中向产品添加图像

时间:2015-04-15 07:43:04

标签: prestashop

我在我的代码中添加了一个实用的产品,产品被正确地添加到presta但不是关于它的图像。

这是我使用的代码的一部分:

                    $url=  "localhost\prestashop\admin7988\Hydrangeas.jpg" ;
                $id_productt = $object->id;         
                $shops = Shop::getShops(true, null, true);    
                $image = new Image();
                $image->id_product = $id_productt ;
                $image->position = Image::getHighestPosition($id_productt) + 1 ;
                $image->cover = true; // or false;echo($godyes[$dt][0]['image']);
                if (($image->validateFields(false, true)) === true &&
                    ($image->validateFieldsLang(false, true)) === true && $image->add())
                    {
                        $image->associateTo($shops);
                        if (! self::copyImg($id_productt, $image->id, $url, 'products', false))
                            {
                            $image->delete();
                        }
                    }

但我的产品还没有任何图片

问题出在copyImg方法......

这是我的copyImg函数:

         function copyImg($id_entity, $id_image = null, $url, $entity = 'products')
{
    $tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import');
    $watermark_types = explode(',', Configuration::get('WATERMARK_TYPES'));

    switch ($entity)
    {
        default:
        case 'products':
            $image_obj = new Image($id_image);
            $path = $image_obj->getPathForCreation();
        break;
        case 'categories':
            $path = _PS_CAT_IMG_DIR_.(int)$id_entity;
        break;
    }
    $url = str_replace(' ' , '%20', trim($url));
    // Evaluate the memory required to resize the image: if it's too much, you can't resize it.
    if (!ImageManager::checkImageMemoryLimit($url))
        return false;
    // 'file_exists' doesn't work on distant file, and getimagesize make the import slower.
    // Just hide the warning, the traitment will be the same.
    if (@copy($url, $tmpfile))
    {
        ImageManager::resize($tmpfile, $path.'.jpg');
        $images_types = ImageType::getImagesTypes($entity);
        foreach ($images_types as $image_type)
            ImageManager::resize($tmpfile, $path.'-'.stripslashes($image_type['name']).'.jpg', $image_type['width'],
             $image_type['height']);

        if (in_array($image_type['id_image_type'], $watermark_types))
            Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity));
    }
    else
    {
        unlink($tmpfile);
        return false;
    }
    unlink($tmpfile);
    return true;
}

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

你有两个问题:

  1. 您正在将第五个参数(带值)传递给copyImg,而该函数没有这样的。
  2. 您的foreach($ images_types为$ image_type)循环也必须包含Hook(添加打开/关闭花括号)。

    foreach ($images_types as $image_type) 
    { 
        ImageManager::resize($tmpfile, $path.'-'.stripslashes($image_type['name']).'.jpg', $image_type['width'], $image_type['height']); 
    
        if (in_array($image_type['id_image_type'], $watermark_types)) 
            Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity)); 
    }
    
  3. 您还应该检查产品是否正确导入,特别是“link_rewrite”以及图像是否在/ img /文件夹中进行了虚拟上传。