Magento将第一张图像设置为默认值

时间:2015-12-26 11:20:41

标签: php magento-1.9

我希望你能帮我解决这个问题。我正在使用Magento 1.9.2.2的导入脚本来下载和设置多个产品图像。不幸的是,最后一个图像被设置为默认值,而不是第一个。请参阅以下代码,应该更改哪些内容以将第一个产品图像设置为默认值?

public function insertProduct($sku,$productDataArray)
{
    if(isset($productDataArray[$sku]) && !empty($productDataArray[$sku]))
    {
        $_product = Mage::getModel('catalog/product')->loadByAttribute('sku',$sku);
        if(!($_product))
        {
            $filesArray = $this->getGallaryFiles($sku); //download images

            $newProduct = Mage::getModel('catalog/product');
            $newProduct->setData($productDataArray[$sku]);

            if(isset($filesArray) && !empty($filesArray))
            {
                $newProduct->setMediaGallery(array('images'=>array (), 'values'=>array ()));
                $imageDir = Mage::getBaseDir('media').DS.'gallary_import'.DS.$sku.DS;
                $firstImage = true;
                foreach ($filesArray as $key => $file) {
                    if($firstImage)
                        $newProduct->addImageToMediaGallery($imageDir.$file, array('image','small_image','thumbnail'), true, false);
                    else
                        $newProduct->addImageToMediaGallery($imageDir.$file, array('image'), true, false);
                }
                rmdir($imageDir);
            }
            $newProduct->save();

            unset($_product);
            unset($newProduct);
            $this->_counts++;
        }else{

            /*$newProduct = Mage::getModel('catalog/product')->load($_product->getId());
            $newProduct->setData($productDataArray[$sku]);
            $newProduct->save();

            unset($newProduct);
            $this->_counts++;*/
            unset($_product);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

谢谢史蒂夫!在你的帮助下,它现在正在工作。我只需要在最后一行中放置{}和删除'image'之间的行(否则最后一张图像仍然是基本图像)。

if($firstImage) { $newProduct->addImageToMediaGallery($imageDir.$file, array('image','small_image','thumbnail'), true, false); $firstImage = false; // added this } else $newProduct->addImageToMediaGallery($imageDir.$file, array(''), true, false);

答案 1 :(得分:0)

$firstImage = true;似乎没有被重置一次,所以它仍然认为一切都是第一个图像,直到最后一个,这仍然是我读过的第一个“IF” ...(在firstImage = false;循环中添加了foreach();

  $firstImage = true;
  foreach ($filesArray as $key => $file) {  // etc...

添加了$firstImage = false;

       $firstImage = true;
       foreach ($filesArray as $key => $file) {
               if($firstImage)
                   $newProduct->addImageToMediaGallery($imageDir.$file, array('image','small_image','thumbnail'), true, false);
                   $firstImage = false;  // added this
               else
                   $newProduct->addImageToMediaGallery($imageDir.$file, array('image'), true, false);
               }
       }

为了整洁,我添加了其他建议以供参考,并删除了评论。

$filesArray = $this->getGallaryFiles($sku); //download images这可能是一个问题,而不是getGalleryFilese?也许你可以改变他们退回的顺序。 ShaileshTapa的回答说他已经“将最后一张图像设置为基础...”所以也许在这里有些东西:Magento: How to programatically set the base image to the first image in the list

这些文章可能会帮助您获得特定图片:How to get a product's image in Magento?Magento get product images in shoppping cart

http://virginiabeachwebdevelopment.com/web-development-blog/programmatically-importing-products-magento请参阅:分配默认产品属性集。

此资源似乎有大量的调整代码,可能有助于gist.github.com/arosenhagen/2397824