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
这会是一个问题,而不是 getGalleryFiles
和 e
吗?也许你让他们回来的顺序可以改变。 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);
希望你能帮我解决这个问题。我正在使用 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
这会是一个问题,而不是 getGalleryFiles
和 e
吗?也许你让他们回来的顺序可以改变。 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);