Magento 将第一张图片设置为默认图片

Magento set first image as default

希望你能帮我解决这个问题。我正在使用 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);
        }
    }
}

$firstImage = true; 似乎在经过一次后不会被重置,所以它仍然认为一切都是第一张图片,直到最后一张,它仍然是 "first" 如果我已正确阅读...(在 foreach(); 循环中添加 firstImage = false;)。

  $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 的回答说他有 "set the last image as the base..." 所以这里可能有一些东西:Magento: How to programatically set the base image to the first image in the list

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

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

此资源似乎包含大量调整代码,可能对 gist.github.com/arosenhagen/2397824

有帮助

谢谢史蒂夫!在您的帮助下,它现在可以正常工作了。我只需要在最后一行将 {} 和 deleted '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);