2016-05-12 6 views
1

Ich habe eine Magento-Site, meine Produkte werden über eine CSV-Datei hochgeladen. Jetzt muss ich Bilder für diese Produkte aktualisieren. Alle meine Bilder werden heruntergeladen und in meinem Magento Site Medienordner gespeichert. Ich habe eine CSV-Datei mit 'SKU' und 'Absoluter Pfad' von Bilddateien erstellt.Mehrere Bilder zu Magento-Produkten programmgesteuert hinzufügen

Dann versuche ich zu laden, die Bilder mit folgendem Code

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

Problem ist, dass im letzten Bild auf alle Felder in dem Produktmedienattribut gesetzt. Wie kann ich Bilder zu verschiedenen Medienattributen durch den obigen Code hinzufügen?


Ich habe

mein Code wie folgt geändert
<?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); 
?> 

Nun meine Frontseite ist abgestürzt ist. Kann keine Produkte auf meiner Seite laden. Wer hat Gedanken, was ich vermisse?

+0

‚rotator_image‘ ist ein Attribut in meinem Attribut –

+0

rotator_image ‚Bilder‘, ich glaube nicht, das so funktioniert, Sie denken, es tut. Auch Ihre Schleife ist verdächtig, Sie scheinen mit for for loop über die Spalten zu iterieren. –

+0

Ich habe das Problem gefunden. Wenn es 3 Bild-URLs für einen Sku gibt, fügt der obige Code 5 Bilder zu diesem Produkt hinzu. Zusätzliche 2 Bilder Pfad werden mit einem Beitrag unter der Punktzahl 1 ('_1') dupliziert. Welcher dieser neuen Pfade hat eine gültige Datei im Verzeichnis. Deshalb wird meine Seite abgestürzt. Irgendwelche Gedanken? –

Antwort

0

Dies ist ein, weil Sie Schleifen sind.

Jedes Mal, wenn Sie $ourProduct->addImageToMediaGallery($filePath, array('image', 'small_image', 'thumbnail'), true, false); das Bild aufrufen, wird small_image & thumbnail auf das neue Bild gesetzt, das hinzugefügt wird.

Wenn Sie sich den Kommentar zu der Funktion ansehen, die Sie anrufen, sehen Sie dies ausgeschrieben.

/** 
* 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) 

Also, wenn Sie das erste Bild wollen, dass die einen für die Medien-Attribute verwendet werden, können Sie einen Scheck direkt vor dem Aufruf von addImageToMediaGallery hinzuzufügen. Dann geben Sie entweder Null oder die Attribute ein, die Sie festlegen möchten.

Die genaue Methode, die Sie verwenden müssen, hängt von der Einrichtung Ihrer CSV-Datei ab. Sind die Produkte in Ordnung, und andere ähnliche Fragen. Dann können Sie den genauen zu verwendenden Scheck herausfinden.

+0

Danke für das Update. Ich möchte wissen, was ist der Unterschied zwischen "Mediengalerie" und "Medienattribute" –

+0

Die kurze Version ist, dass die Mediengalerie die Sammlung von Bildern ist, und die Medienattribute ist die Wahl eines bestimmten Bildes für einen bestimmten verwendet werden Attribut, (kleines Bild, Bild, Thumbnail) –

0

Hallo der beste und schnellste Weg, Bilder für Produkte zu importieren, ist Magmi Plugin. Sie müssen legen Sie alle Ihre Bilder unter/media/Import-Ordner und einfach in Ihrer csv ein Spalten small_image base_image und Thumbnail

genannt als sku erstellen und für die Bilder Spalte nur den Bildpfad als /imagename.jpg eingeben

Stellen Sie sicher, dass die Bildattributprozessor-Plugin-Aktivierung in Magmi aktiviert ist. Es wird den Import in Sekunden erledigen. Sie können auch Produktbilder von Urls auch durch magmi http://wiki.magmi.org/index.php?title=Image_attributes_processor

Hoffnung importieren diese Dank

0

Sie fügen die zusätzlichen Bilder grammatisch Pro-Hilfe wird das folgende Skript verwenden.

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; 
    }