以编程方式将多个图像添加到 Magento 产品

问题描述 投票:0回答:3

我有一个 magento 网站,我的产品是通过 csv 文件上传的。现在我需要更新该产品的图像。 我的所有图像均已下载并保存在我的 magento 站点媒体文件夹中。我创建了一个 csv 文件,其中包含图像文件的“SKU”和“绝对路径”。

然后我尝试使用以下代码加载该图像

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

现在我的前台网站崩溃了。无法加载我的网站中的任何产品。 有人知道我错过了什么吗?

php magento magento-1.9 shopping-cart
3个回答
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
投票

导入产品图像的最佳且最快的方法是 Magmi 插件。您必须将所有图像放在 /media/import 文件夹下,然后在 csv 中创建一个名为 sku Small_image base_image 和缩略图的列。

对于图像列,只需输入图像路径 /imagename.jpg

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


0
投票

您可以使用以下脚本以语法方式添加附加图像。

$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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.