我有一个magento网站,我的产品是通过csv文件上传的。现在我需要更新该产品的图像。 我的所有图像都下载并保存在我的magento站点媒体文件夹中。我创建了一个带有'SKU'和'绝对路径'的图像文件的csv文件。
然后我尝试使用以下代码加载图像
<?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 :(得分:0)
这是因为你正在循环。
每当您致电$ourProduct->addImageToMediaGallery($filePath, array('image', 'small_image', 'thumbnail'), true, false);
图片时,small_image&amp;缩略图设置为添加的新图像。
如果您查看有关您正在致电的功能的评论,您会看到这一点。
/**
* 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文件的设置。产品是否有序,以及其他类似问题。然后你可以弄清楚要使用的确切检查。
答案 1 :(得分:0)
导入图像的最佳和最快的方法是Magmi插件。 您必须将所有图像放在/ media / import文件夹下 只是 在你的csv中创建一个名为sku small_image base_image和thumbnail
的列对于images列,只需输入图像路径为/imagename.jpg
确保在magmi中启用图像属性处理器插件启用。它将在几秒钟内完成导入。您还可以通过magmi从网址导入产品图片 http://wiki.magmi.org/index.php?title=Image_attributes_processor
希望这会有所帮助 感谢
答案 2 :(得分: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;
}