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: enter image description here

Wie füllen Sie alle Beschreibungen aus? Store A (Französisch) Zu Store B (Französisch)

War es hilfreich?

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). short_description Dort), aber ich hoffe, es wird Ihnen helfen, Ihre eigene Lösung zu erstellen.:) :)

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

Die Funktionalität von

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top