Magento – How to programatically import product and set images to default

imageimportproducts-management

I am creating a simple product via code but struggling adding the images correctly.
The product uploads fine and also the images too, which show ok on the frontend. But the radio buttons for base, small image and thumbnail are not ticked for the default value of the product. So the products image does not show up on the front end.

The code i am using to add the image is

$product->addImageToMediaGallery($filePath, array ('image','small_image','thumbnail'), false, false);

Magento Screenshot

This is a multisite store. How can i get the default values of the image to tick when the image upload is done?

Thanks for the help!!

Best Answer

Here's the code I used recently for creating a product. It's based on having an array of image urls ($imgArray) rather than a single image url. It adds the first image in the array as the thumb/base/small and the rest as additional images.

It was based on MagePsycho's blog post here;

http://www.blog.magepsycho.com/how-to-import-product-images-from-external-url-in-magento/

    // We set up a $count variable - the first image gets used as small, thumbnail and base
    $count = 0;

    $mediaAttribute = array (
            'thumbnail',
            'small_image',
            'image'
        );

    foreach ($imgArray as $image) :

            $imgUrl = $this->_save_image( $image );       

            if ($count == 0) :

                $newproduct->addImageToMediaGallery( $imgUrl , $mediaAttribute, false, false ); 

            else :

                $newproduct->addImageToMediaGallery( $imgUrl , null, false, false );

            endif;

            $count++;  

    endforeach; 

And the _save_image method;

protected function _save_image($img) {

    $imageFilename      = basename($img);    
    $image_type         = substr(strrchr($imageFilename,"."),1); //find the image extension
    $filename           = md5($img . strtotime('now')).'.'.$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/
    $newImgUrl          = file_put_contents($filepath, file_get_contents(trim($img))); //store the image from external url to the temp storage folder

    return $filepath;

}

If you are using similar and it isn't working you might want to look at filepaths, permissions and also reindexing as potential issues that could fix your problem.