2016-05-12 73 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; 
    } 
相關問題