2013-08-28 15 views
6

Występują problemy z wyświetlaniem obrazów z ich produktami. Kiedy tworzę produkt i ręcznie wstawiam obraz z tym produktem (zarządzam produktami), obraz pokazuje, co jest świetne. Mamy jednak ponad 1000 zdjęć produktów, które trzeba przesłać (wszystkie informacje o produkcie są już potrzebne Wystarczy dodać obrazy) Wyeksportowałem plik CSV produktów, a adres obrazu roboczego to/n/g/image1 .jpg Skopiowałem to, ale zmieniłem obraz na image2.jpg, image3.jpg itd. Następnie wgrałem nowe obrazy do tego folderu na naszym serwerze, myśląc, że to wystarczy. Przesyłam następnie plik CSV wysadzić pamięć podręczną i ponownie indeksu danych, jednak nie pojawiają się nowe obrazy i gorzej działający obraz nie wyświetla. Mam wypełnione zdjęcia, small_image i szczegóły miniatur w pliku CSV. Wszystkie obrazy mają prawidłową wielkość itp.Magento importowanie obrazów

Co więcej, może pozwolić mi powiedzieć, gdzie mogę po prostu mieć 1 folder z obrazami w katalogu, w którym przechowywane są wszystkie moje obrazy? Dzięki

Używam Magento wersję 1.7.0.2

+0

Szczegóły dotyczące uzależnień Nie mam mediów/importu, które widzę w swoim katalogu dla wielu osób. – user1035650

Odpowiedz

14

Przede wszystkim obraz należy przechowywać w media>import katalogu

następnie w pliku csv wystarczy napisać w kolumnie obrazu /imagename.jpg

znajdzie tę samą nazwę w katalogu importu, jeśli obraz istnieje, to prześle obraz

EDYTOWANIE

jeśli nie masz katalog import po prostu stworzyć to

+1

Jeśli nie mam nośnika/importu, czy mogę po prostu utworzyć go w katalogu? Mam media wtedy/katalog/klienta itp. Nie ma folderu importu, ponieważ nie ustawiłem tego. Istnieje jednak var/import, ale zawiera on moje zaimportowane pliki CSV. – user1035650

+0

powinieneś utworzyć folder, jeśli nie –

+2

Dziękuję razy miliony –

3

przykro mi to powiedzieć, ale jest więcej dzieje się za kulisami z obrazami Magento, że po prostu umieszczenie pliku w bazie danych i łączenie z twoim obrazem. Samo generowanie pamięci podręcznej jest dość złożone. Wierzę, że będziesz miał trudności z robieniem tego tak, jak próbujesz.

To powiedziawszy, mam sugestię. Ponieważ twoje obrazy są już na serwerze, sugeruję napisanie prostego skryptu php, aby Magento mógł dołączyć je do obrazu produktu. To może być zautomatyzowane, ale dam ci małą przykład poniżej ...

Aby dołączyć zdjęcie, byś po prostu przejdź do url jak ten http://yoursite.com/imageattacher.php?sku=YOURSKU&image=yourimagefilename.jpg

Skrypt byłyby tak .. Stwórz plik w swoim magento ROOT i nazwij go imageattacher.php. Prześlij swoje zdjęcia do katalogu importu mediów magento. Nie testowałem tego, ale powinno działać.

<?php 
    // Initialize magento for use outside of core 
    umask(0); 
    require_once 'app/Mage.php'; 
    Mage::app('admin'); 

    // Get the variables from the URL 
    $sku = $_GET["sku"]; 
    $imageName = $_GET["image"]; 

    // get the image from the import dir 
    $import = Mage::getBaseDir('media') . DS . 'import/' . $imageName; 

    // Load the product by sku 
    $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$sku); 

    // if the product exists, attempt to add the image to it for all three items 
    if ($product->getId() > 0) 
    { 
     // Add the images and set them for their respective usage (the radio button in admin) 
     $product->addImageToMediaGallery($import,array('image', 'small_image', 'thumbnail'),false,false); 

     // Make the changes stick 
     $product->save(); 
    } 

?> 

Zobacz ten http://www.danneh.org/2012/05/creating-products-programmatically-magento/

+0

Dzięki temu spróbuję, jeśli jest to ostatnia opcja. – user1035650

0

Emisja w końcu było to, że nie było folderu import w katalogu mediów. Zdjęcia zostały przesłane do tego folderu. Kolumna obrazu w pliku CSV została zmieniona na /image1.jpg, co umożliwiło jej wyświetlenie na stronie internetowej.

0

Musiałem zaimportować kilka obrazów produktów Magento, które zostały nazwane przez SKU (np. 123456.jpg). Jest to skrypt, którego użyłem do zaimportowania, którego część opiera się na odpowiedzi CarComp. Będzie działać tylko dla numerycznych kodów SKU (np. 123456), ale może być dość łatwo zmodyfikowany w celu obsługi alfanumerycznych.

<?php 
require_once(__DIR__ . "/app/Mage.php"); 
Mage::app('admin'); 

class Sku_ImageLoader { 
    private $_uploadDir; 
    private $_imagePaths; 

    public function setUploadDirectory($dir = null) { 
     if (empty($dir)) { 
      if (isset($this->_uploadDir)) return $this; 
      $dir = 'upload';    
      } 
     $this->_uploadDir = Mage::getBaseDir('media') . DS . $dir; 
     // mkdir($this->_uploadDir . DS . "/loaded", 0770); 
     return $this; 
    } 

    public function load() { 
     $this->setUploadDirectory(); 

     // Match product images like 123456.jpg 
     $pattern = '[0-9][0-9][0-9][0-9][0-9][0-9].{jpg,gif,png}'; 

     chdir($this->_uploadDir); 
     $this->_imagePaths = glob($pattern, GLOB_BRACE); 
     return $this; 
    } 

    public function showFiles() { 
     $this->load(); 
     echo "\r\n\r\nSorry, I wasn't able to upload the following image files in " . $this->_uploadDir . "\r\n\r\n<pre>\r\n"; 
     print_r($this->_imagePaths); 
     return $this; 
    } 

    private function _addImage($path) { 
     $sku = (string)intval($path); 
     try { 
      echo "Loading SKU: {$sku} ... "; 
      $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$sku); 
      // if the product exists, attempt to add the image to it for all three items 
      if (strpos(get_class($product), 'Catalog_Model_Product') !== false && $product->getId() > 0) { 
       $product->addImageToMediaGallery($path,array('image', 'small_image', 'thumbnail'),false,false); 
       $product->save(); 
       echo " ok \r\n"; 
       return true; 
      } 
     } catch (Exception $e) { 
      echo "Exception thrown for {$sku}: " . $e->getMessage() . "\r\n"; 
     } 
     echo " (FAILED) \r\n"; 
     return false; 
    } 

    private function _moveImage($path) { 
     // rename($path, 'loaded' . DS . $path); 
     unlink($path); 
    } 

    public function import() { 
     echo "<pre>\r\n"; 
     if (!isset($this->_imagePaths)) $this->load(); 
     foreach ($this->_imagePaths as $path) { 
      if ($this->_addImage($path)) { 
       $this->_moveImage($path); 
      } 
     } 
     return $this; 
    } 

} 

$u = new Sku_ImageLoader(); 

$u->import()->showFiles(); 
?>