2015-04-15 3 views
-1

У меня есть прагматически добавленный продукт в моем коде, продукт добавлен в presta правильно, но не о его изображении.Как добавить изображение к товару в prestashop

здесь какая-то часть моего кода, который я использовал:

    $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; 
} 

Может ли кто-нибудь мне помочь?

+0

Обратите внимание, что здесь есть поврежденный URL-адрес, который получают продукты: http: //localhost/prestashop/24-large_default/-.jpg – user3634011

ответ

0

У вас есть 2 проблемы:

  1. Вы проходящие 5-й параметр (со значением) в copyImg, в то время как функция не имеет таковой.
  2. Ваш цикл foreach ($ images_types as $ 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)); 
    } 
    

Вы должны также проверить, если продукт правильно импортируется, EXPECIALLY «link_rewrite» и если изображение загружено в Специальные условия на/IMG/папки.

+0

tnx alot dear PrestaShop-Developer.c для ответа – user3634011

+0

Я был глупым! я решил свою проблему, и неправильная вещь была глупой ошибкой, которая смутила меня в течение недели! это было в URL-адресе, я изменился на «http: //localhost/prestashop/admin7988/Hydrangeas.jpg», и моя проблема решена. – user3634011

+0

в любом случае, я даю зеленый галочку вашему ответу из-за двух вещей: 1. ваше удовольствие, 2. ваш правильный ответ на код – user3634011

Смежные вопросы