Produkte mehrsprachig importieren

In Magento können durch das Anlegen unterschiedlicher Store-Views Produkte mehrsprachig gepflegt werden. Der Benutzer kann dabei entscheiden ob die Daten vom Hauptstore übernommen oder durch die aktuelle Store-View überschrieben werden.

Ein bestehender Produktimport lässt sich relativ einfach um die Möglichkeit der Mehrsprachigkeit erweitern. Der Trick besteht einzig und alleine darin vor dem Laden des Produktes noch den Store zu definieren.

Zuerst erstellen wir ein Standard-Produkt über das Product-Model:

require_once dirname(__FILE__).'/app/Mage.php';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 

$product = Mage::getModel('catalog/product');

$product->setAttributeSetId( 1 ); // Id kann abweichen
$product->setVisibility(4); // Produkt soll in Katalog und Suche sichtbar sein
$product->setStatus(1);  // Produkt soll aktiv sein

$product->setSku("webguys-1234"); // Die Artikel-Nr. lautet webguys-1234
$product->setName("Hello World"); // Das soll später übersetzen werden

$product->setStoreId( 1 );
$product->setWebsiteIds(array(1));

$product->save();	

Jetzt haben wir ein kleines Basisprodukt importiert. Zugegeben fehlen natürlich ein paar Hauptattribute wie z.B. der Preis aber der soll für diesen Artikel keine Rolle spielen.

Nun wollen wir das gerade erstellte Produkt in eine andere Sprache, also in einer anderen Store-View pflegen:

$product = Mage::getModel('catalog/product');

$product->setStoreId(2);
$product->load( $productid );

$product->setName( "Hallo Welt!" ); // Und jetzt die deutsche Übersetzung
$product->save();

Schwups ist das Produkt in zwei Store-Views und somit mehrsprachig verfügbar. Zu beachten ist das ausschließlich Attribute importiert werden sollten die sich vom Hauptstore auch logisch unterscheiden können - sonst macht es nur unnötigen Aufwand und kostet Rechenzeit.



Ein Beitrag von Tobias Vogt
Tobias's avatar

Tobias Vogt arbeitet seit 2008 mit Magento und ist seit 2011 durch Magento zertifizierter Entwickler. Seit 2016 ist er Mitgründer und CTO bei der connect-io GmbH, einer Magento-Agentur mit Sitz im idyllischen Paderborn-Salzkotten. Er gehört zum Gründer-Team der Webguys und ist seit November 2011 Bachelor of Science (Wirtschaftsinformatik). Sie erreichen Ihn per E-Mail unter tobi@webguys.de.

Alle Beiträge von Tobias

Kommentare
Keenora am

Oha, so gehts also. Ich hatte das Ursprungsobjekt dafür genommen und da passierte nie was. Aber so klappts, wunderbar :)

Stefan B. am

Hey,

Vielen Dank für den Gedankenanstoß! Habe dazu noch zwei Fragen, wäre klasse, wenn dies noch beantwortet werden könnte!

Die Beschreibung und der Artikel-Name werden in diesem Fall pro Storeview gesetzt. Klappt soweit super. Jedoch möchte ich nun die Kategorie-Ids setzen. Diese werden ja auf "Store"-Ebene gesetzt.

Wie funktioniert dies nun? Habe bereits vergeblich versucht, dies ebenfalls auf Storeview-Ebene zu setzen, was jedoch nicht funktioniert hat (es wird nichts gesetzt).

Meine zweite Frage wäre, ob man das Skript von oben auch schneller machen könnte. Bei zwei Stores je 6 Sprachen gäbe es 12x "load" und 12x "product->save()" - was ziemlich lange dauert. Kann das ganze auch in einem "Zug" erfolgen?

Vielen Dank! :)

Stephan am

Hey,

vielen Dank für das Script. Ich scheitere gerade daran die individuellen Optionen mehrsprachig zu importieren.

Sowas mal gemacht?

Das Script was ich mir gebaut habe legt leider in jeder Sprache alle optionen an. Ich lösche erst alle Optionen und mache dann für jede Sprache etwas in der Art

$product = Mage::getModel("catalog/product")->load($p->getId())->setStoreId(1); $opt = Mage::getModel('catalog/product_option'); $opt->setProduct($product);

...

$opt->addOption($options); $opt->saveOptions(); $product->setRequiredOptions(true); $product->setHasOptions(true); $product->save();

Finde leider nichts im Netz. Danke.

Paeddl am

Vielen Dank für die schnelle Reaktion :)

Für mich gibt es nur einen Unterschied zwischen Store und Store-View, daher wundert mich die Bezeichnung der Methode. Ganz oben sprichst du auch von Store View, weiter unten aber wieder von Store. In meinem Fall geht es um Folgendes:

Default Website

Default Store -- Deutsch -- English

Ich sehe allerdings gerade im Magento-Backend, in der Store-Verwaltung die Links zum Bearbeiten der Store-Views, sehen so aus:

http://www.example.com/index.php/admin/system_store/editStore/store_id/1/ http://www.example.com/index.php/admin/system_store/editStore/store_id/2/

Augenscheinlich wechselt hier die Terminologie zwischen. Die Bearbeitung der Store's ruft im Backend die Action "editGroup" auf. Na das soll einer verstehen. Vielen Dank für's Licht-ins-Dunkle-bringen :)

Tobias Vogt am

Völlig richtig. Erst die StoreId mittels setStoreId setzen und dann die Abweichungen für den jeweiligen Store einpflegen. Möchtest du das Produkt für einen speziellen Store laden musst du vor dem Laden setStoreId aufrufen :)

Paeddl am

Sehr nützlicher Beitrag für mich, da ich bisher noch keine Möglichkeit gefunden habe für den Store View andere, nämlich übersetzte Attributwerte zu übergeben. Ich bin bisher wahrscheinlich nicht drauf gestoßen, weil ich nach einer Methode gesucht habe, die in irgendeiner Form "Store View" im Namen trägt. Dein Skript-Schnipsel habe ich bisher noch nicht getestet, aber an die oben genannte Methode "setStoreId" wird als Parameter die Store-View-ID übergeben oder habe ich da etwas missverstanden?

Dein Kommentar