Magento - программно добавить изображение из URL-адреса?

В настоящее время я работаю над одним скриптом, который программно добавляет продукты. Прямо сейчас у меня проблема с той частью, что этот скрипт получает изображение из URL-адреса и загружает его в каталог, а затем использует его в качестве изображения продукта.

Я использую Magento 1.9.1.

Итак, вот часть скрипта, которая должна брать изображение из URL-адреса и загружать его в новый продукт как изображение продукта:

$product = Mage::getModel('catalog/product')->load($new_product_id);

$url = 'http://media.asicdn.com/images/jpgo/6080000/6089330.jpg';
$img = '/media/catalog/product/images/image1.jpg';
file_put_contents($img, file_get_contents($url));

$product->setMediaGallery (array('images'=>array (), 'values'=>array ()));
$product->addImageToMediaGallery ($img , array ('image','small_image','thumbnail'), false, false);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

$product->save();

Когда я это делаю, я получаю сообщение об ошибке:

Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'Image does not exist.' in /home/superweb/public_html/sportsdirect/app/Mage.php:595 Stack trace: #0 /home/superweb/public_html/sportsdirect/app/code/core/Mage/Catalog/Model/Product/Attribute/Backend/Media.php(274): Mage::throwException('Image does not ...') #1 /home/superweb/public_html/sportsdirect/app/code/core/Mage/Catalog/Model/Product.php(1047): Mage_Catalog_Model_Product_Attribute_Backend_Media->addImage(Object(Mage_Catalog_Model_Product), '/media/catalog/...', Array, false, false) #2 /home/superweb/public_html/sportsdirect/SignProduct.php(63): Mage_Catalog_Model_Product->addImageToMediaGallery('/media/catalog/...', Array, false, false) #3 {main} thrown in /home/superweb/public_html/sportsdirect/app/Mage.php on line 595

Товар создан, но изображения товара нет.


person user3788452    schedule 09.07.2014    source источник
comment
Он сохранил изображение в /media/? Возможно, вам придется обновить свой путь на что-то вроде ../media/ относительно вашего пути к скрипту.   -  person Renon Stewart    schedule 09.07.2014


Ответы (2)


Надеюсь, это поможет

$newProduct = Mage::getModel('catalog/product')->load($productId);

$image_url  = $data['productImg'];
$image_url  = str_replace("https://", "http://", $image_url); // replace https tp http
$image_type = substr(strrchr($image_url,"."),1); //find the image extension
$filename   = $data['productPartNumber'].'.'.$image_type; //give a new name, you can modify as per your requirement
$filepath   = Mage::getBaseDir('media') . DS . 'import'. DS . $filename; //path for temp storage folder: ./media/import/

$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL,$image_url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Cirkel');
$query = curl_exec($curl_handle);
curl_close($curl_handle);

Mage::Log('68. File Path ' . $filepath . ', image url ' . $image_url);

file_put_contents($filepath, $query); //store the image from external url to the temp storage folder file_get_contents(trim($image_url))
$filepath_to_image = $filepath;

if (file_exists($filepath_to_image)) {
    $newProduct->addImageToMediaGallery($filepath_to_image, array('image', 'small_image', 'thumbnail'), false, false);
    $newProduct->save();
}
person Harikaran K    schedule 14.10.2014
comment
добавить try-catch в $product-›save() - person srgb; 14.10.2014

Ниже код работает для меня

$product = Mage::getModel('catalog/product')->load($productId);
$urlToImage = "SOME URL";
$mySaveDir = Mage::getBaseDir('media') . DS . 'my_images' . DS ;
$filename = basename($urlToImage);
$completeSaveLoc = $mySaveDir.$filename;
if(!file_exists($completeSaveLoc)){
    try {
        file_put_contents($completeSaveLoc,file_get_contents($urlToImage));
    }catch (Exception $e){

    }
}else{
    //echo "FILE EXIST " . $completeSaveLoc . "<br/>";
}
try {
    $product->addImageToMediaGallery($completeSaveLoc, array('image','thumbnail','small_image'), false);
$product->save();
} catch (Exception $e) {
   Mage::log($e->getMessage());
}
person Magemad    schedule 22.01.2017