Wie ordnet man Beschreibungen zwischen zwei verschiedenen Shops und zwei Sprachen zu?
-
12-12-2019 - |
Frage
Szenario:
Gründung eines Magento-Shops (Geschäft A) mit 2 Store-Ansichtssprachen, Englisch und Französisch.
Große Anzahl an Produkten (10.000 +)
Neues Geschäft (Geschäft B) wurde erstellt (gleiche Magento-Installation) und enthält dieselben Produkte wie Geschäft A
Problem:
Beim Zuordnen aller vorhandenen Produkte aus Geschäft A Zu Shop B, werden Sie gefragt, woher die Standardinformationen stammen sollen. Dies deckt nur eine Store-Ansicht ab (Englisch).
Erwünschtes Ergebnis:
Wie füllen Sie alle Beschreibungen aus? Store A (Französisch) Zu Store B (Französisch)
Lösung
Vielleicht erledigt ein Beobachter die Aufgabe?
Z.B:
class My_Awesome_Model_Observer
{
public function syncDescriptions($observer)
{
$productId = $observer->getProduct()->getId();
$storeAEnId = 1; //store view Id for English store A
$storeBEnId = 2; //as above for store B
$storeAFrId = 2; //store A French view's id
$storeBFrId = 4; //French store B
//of course replace above with real store Ids
$descAEn = Mage::getModel('catalog/product')->setStore($storeAEnId)->load($productId)->getData('description');
// Now we check if description in store B is up-to-date with store A's, if not, if yes, we leave, if not, it is updated
if ($descAEn != Mage::getModel('catalog/product')->setStore($storeBEnId)->load($productId)->getData('description'))
{
Mage::getModel('catalog/product')->setStore($storeBEnId)
->load($productId)
->getData('description', $descAEn)
->save();
}
$shortDescAEn = Mage::getModel('catalog/product')->setStore($storeAEnId)->load($productId)->getData('short_description');
// Same check for short description
if ($shortDescAEn != Mage::getModel('catalog/product')->setStore($storeBEnId)->load($productId)->getData('short_description'))
{
Mage::getModel('catalog/product')->setStore($storeBEnId)
->load($productId)
->getData('short_description', $shortDescAEn)
->save();
}
$descAFr = Mage::getModel('catalog/product')->setStore($storeAFrId)->load($productId)->getData('description');
// same for French view
if ($descAFr != Mage::getModel('catalog/product')->setStore($storeBFrId)->load($productId)->getData('description'))
{
Mage::getModel('catalog/product')->setStore($storeBFrId)
->load($productId)
->getData('description', $descAFr)
->save();
}
$shortDescAFr = Mage::getModel('catalog/product')->setStore($storeAFrId)->load($productId)->getData('short_description');
// same for French short description
if ($shortDescAFr != Mage::getModel('catalog/product')->setStore($storeBFrId)->load($productId)->getData('short_description'))
{
Mage::getModel('catalog/product')->setStore($storeBFrId)
->load($productId)
->getData('short_description', $shortDescAFr)
->save();
}
}
}
Natürlich sollten Sie dann einen Beobachter anmelden catalog_product_save_after
Ereignis, bei dem Sie Ihre Observers-Klasse und -Methode in Ihrem Modul auswählen config.xml
.Z.B:
<global>
<events>
<catalog_product_save_after>
<observers>
<awesome_observer>
<type>singleton</type>
<class>My_Awesome_Model_Observer</class>
<method>syncDescriptions</method>
</awesome_observer>
</observers>
</catalog_product_save_after>
</events>
</global>
Es handelt sich lediglich um eine recht grundlegende Idee zur Lösung des Problems, da ich nicht weiß, welche Beschreibungen Sie verwenden (vielleicht möchten Sie auch Folgendes angeben). , aber ich hoffe, es wird Ihnen helfen, Ihre eigene Lösung zu erstellen.:) :)short_description
Dort)
P.S.:Achten Sie auf Beobachterschleifen.
Andere Tipps
Ich kann mir vorstellen, dass Sie ein eigenes Synchronisierungsmodul schreiben müssen, das einen nächtlichen Import von Informationen aus dem Laden eines Franzosen zum Speichern von B-Franzosen schreibt.
Verwenden Sie das Feld 'aktualisiert_at' für Produkte, um die Menge der Arbeit zu minimieren, die Sie benötigen.
pseudocode
- Planen Sie den Cron-Job, um nächtliches
- Durchsuchen Sie jedes Produkt
- Für jedes Produkt, das seit dem letzten Job aktualisiert wurde, kopieren Sie Informationen vom Laden A (Französisch), um B (French) zu speichern
- Melden Sie sich an der Zeit, bis der Job rannte
Dies ist anzunehmen, dass Sie keine unmittelbare Synchronisierung von Produkten benötigen.
Eine Tipp wäre, um sicherzustellen, dass Ihr Indexierungsmodell nicht auf "Update on Save" eingestellt ist
Massenattributaktualisierungsaktualisierung erlaubt es nicht, Werte aus einem Ladenansicht aufgrund der Logikeinschränkungen nicht anwenden.Magento gilt nur Standardwerte in den neu zugewiesenen Ladenansichten.
Versuchen Sie, die reine SQL-Problemumgehung zu verwenden. generasacodicetagpre.
Das Skript kopiert Werte von 'Beschreibung' und 'short_decription' Attribute von '<source_store_id>
' Store-Ansicht auf '<target_store_id>
' Speicheransicht.
Ersetzen Sie '<target_store_id>
' und '<source_store_id>
' Konstanten und führen Sie dieses Skript für jede Ladenansicht separat aus.
Verwenden Sie 'Insert ignorieren ...' Syntax anstelle von 'Insert .. auf doppeltes Key-Update', wenn Sie bereits vorhandene Werte erhalten möchten.
Wenn Sie einige andere Attributwerte kopieren möchten, müssen Sie das Skript nur entsprechend ändern.