[英]Adding multiple images to Magento Products programmatically
我有一個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);
?>
現在我的前台網站已經崩潰了。 無法加載我網站上的任何產品。 任何人都有想法我錯過了什么?
這是因為你正在循環。
每次調用$ourProduct->addImageToMediaGallery($filePath, array('image', 'small_image', 'thumbnail'), true, false);
圖像,small_image和縮略圖設置為添加的新圖像。
如果你查看你正在調用的函數的注釋,你會看到這個注釋。
/**
* 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文件的設置。 產品是否有序,以及其他類似問題。 然后你可以弄清楚要使用的確切檢查。
您最好和最快的方式導入產品的圖像是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從網址導入產品圖片
希望這會有所幫助謝謝
您可以使用以下腳本以編程方式添加其他圖像。
$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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.