【问题标题】:Magento set first image as defaultMagento 将第一张图片设置为默认值
【发布时间】:2015-12-26 11:20:40
【问题描述】:

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

【问题讨论】:

标签: php magento-1.9


【解决方案1】:

谢谢史蒂夫!在您的帮助下,它现在正在工作。我只需要将 {} 和已删除的“图像”之间的行放在最后一行(否则最后一个图像仍然是基础图像)。

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);

【讨论】:

    【解决方案2】:

    $firstImage = true; 似乎不会被重置一次,所以它仍然认为一切都是第一张图片,直到最后一张,如果我没看错的话,它仍然是“第一张”。 .(在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);
                   }
           }
    

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

    $filesArray = $this->getGallaryFiles($sku); //download images 这可能是一个问题,而不是带有egetGalleryFiles?也许你让他们回来的顺序可以改变。 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

    【讨论】:

    • 谢谢,我已经添加了这样的代码,但不幸的是没有任何改变。图像的顺序相同,最后一张图像仍然是默认图像。 code $newProduct->setMediaGallery(array('images'=>array (), 'values'=>array ())); $imageDir = Mage::getBaseDir('media').DS.'gallary_import'.DS.$sku.DS; array_reverse($filesArray); array_reverse($newProduct); $firstImage = true;
    • 很抱歉。这是一个猜测。 $firstImage = false; 有什么作用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2014-05-26
    • 2012-05-06
    • 2020-09-01
    • 2012-11-09
    相关资源
    最近更新 更多