2016-05-12 47 views
1

我有一个magento网站,我的产品通过csv文件上传。现在我需要更新该产品的图像。 我所有的图像都下载并保存在我的magento网站媒体文件夹中。我用图像文件的'SKU'和'Absolute path'创建了一个csv文件。以编程方式向Magento Products添加多个图像

然后我试图加载与下面的代码

<?php 
require_once 'app/Mage.php'; 
Mage::app(); 
Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID); 
$importDir = Mage::getBaseDir('media') . DS . 'Products/Vases/'; 
$file_handle = fopen("sku_image.csv", "r"); 

while (($data = fgetcsv($file_handle, 1000, ",")) !== FALSE) { 
$num = count($data); 
$row++; 
$productSKU = $data[0]; 
$ourProduct = Mage::getModel('catalog/product')->loadByAttribute('sku',$productSKU); 
for ($c=1; $c < $num; $c++) { 
    $fileName = $data[$c]; 
    $filePath = $importDir.$fileName; 
    if (file_exists($filePath)) { 
     if ($ourProduct) { 
      $ourProduct->addImageToMediaGallery($filePath, array('image', 'small_image', 'thumbnail'), true, false); 
      $ourProduct->save(); 
     } 
    } else { 
     echo $productSKU . " not done"; 
     echo "<br>"; 
    } 
} 
} 
fclose($file_handle); 
?> 

图像问题是,最后的图像设置在产品媒体属性的所有领域。如何通过上述代码将图像添加到不同的媒体属性。


我已经改变了我的代码如下

<?php 
require_once 'app/Mage.php'; 
Mage::app(); 
Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID); 
$importDir = Mage::getBaseDir('media') . DS . 'Products/Vases/'; 
$file_handle = fopen("sku_image.csv", "r"); 

while (($data = fgetcsv($file_handle, 1000, ",")) !== FALSE) { 
    $num = count($data); 
    $row++; 
    $productSKU = $data[0]; 

    $ourProduct = Mage::getModel('catalog/product')->loadByAttribute('sku',$productSKU); 
    for ($c=1; $c<$num; $c++) { 
     $fileName = $data[$c]; 
     $filePath = $importDir.$fileName; 
     if (file_exists($filePath)) { 
      if ($ourProduct) { 
       if ($c==1) { 
        $ourProduct->addImageToMediaGallery($filePath, 'rotator_image', false, false); 
       } else { 
        $ourProduct->addImageToMediaGallery($filePath, null, false, false); 

       } 
       $ourProduct->save(); 
      } 
     } else { 
      echo $productSKU . " not done"; 
      echo "<br>"; 
     } 

    } 
    echo "<br>"; 

} 
fclose($file_handle); 
?> 

现在我面前的网站已经坠毁。无法加载我的网站中的任何产品。 任何人都有想法我失踪?

+0

“rotator_image”是我的属性的属性设置“图像” –

+0

rotator_image,我不认为这个工程,你认为它的方式。此外,你的循环是可疑的,你似乎用for循环遍历列。 –

+0

我发现了这个问题。如果有任何sku有3个图像网址,上面的代码将为该产品添加5个图像。额外的2个图像路径与分数1('_1')下的帖子重复。这个新路径在目录中有任何有效的文件。这就是为什么我的网站正在崩溃。有什么想法吗 ? –

回答

0

这是因为你在循环。

每当您拨打$ourProduct->addImageToMediaGallery($filePath, array('image', 'small_image', 'thumbnail'), true, false);时,图片,小图片&缩略图被设置为添加的新图像。

如果你看看你正在调用的函数的评论,你会看到写出来的。

/** 
* Add image to media gallery 
* 
* @param string  $file    file path of image in file system 
* @param string|array $mediaAttribute code of attribute with type 'media_image', 
*           leave blank if image should be only in gallery 
* @param boolean  $move    if true, it will move source file 
* @param boolean  $exclude   mark image as disabled in product page view 
* @return Mage_Catalog_Model_Product 
*/ 
public function addImageToMediaGallery($file, $mediaAttribute=null, $move=false, $exclude=true) 

所以,如果你想第一个图像是用于媒体属性的一个,你可以调用addImageToMediaGallery前添加一个检查。然后,您要么传入null或要设置的属性。

您需要使用的确切方法取决于您的csv文件的设置。产品是否有序以及其他类似的问题。然后你可以找出使用的确切检查。

+0

感谢您的更新。我想知道“媒体库”和“媒体属性”之间的区别是什么 –

+0

简短的说法是媒体库是图像的集合,而媒体属性是特定图像的选择以用于特定属性,(small_image,图像,缩略图) –

0

嗨,最好的和最快捷的方式导入图像的产品是Magmi插件。 你必须所有的图片放置在/ media /导入文件夹和 在CSV只需 创建一个命名为SKU small_image base_image和缩略图

列,对于图像列刚进入图像路径/imagename.jpg

确保启用magmi中的图像属性处理器插件启用。它会在几秒钟内完成导入。您也可以通过还magmi http://wiki.magmi.org/index.php?title=Image_attributes_processor

希望导入来自网址的产品图片,这将有助于 感谢

0

您添加其他图片亲们语法使用下面的脚本。

http://www.pearlbells.co.uk/how-to-add-main-image-and-additional-image-to-the-products-pro-grammatically-magento/

$importDir = Mage::getBaseDir('media') . DS; 
// additional images 
    if ($import_product[29] != '') { 
     $addImages = explode(",", trim($import_product[29])); 
     foreach ($addImages as $additional_image) { 
      $image_directory = $dir .DS.'data'.DS. trim($additional_image); 
      if (file_exists($image_directory)) { 
       $product->addImageToMediaGallery($image_directory, null, false, false); 
      } else { 
       $image_directory = $dir . 'data' . DS . 'comingsoon.jpg'; 
       $product->addImageToMediaGallery($image_directory, null, false, false); 
      } 
     } 
     echo 'Additional images for product ' . $product->getName() . ' ' . $product->getId() . ' imported successfully' . PHP_EOL; 
    } 
相关问题