Bestandsbenachrichtigungs-E-Mails für konfigurierbare Produkte


8

Ich hatte kürzlich ein Problem mit einem Geschäft, als ich bemerkte, dass bestimmte E-Mails mit Bestandsbenachrichtigungen nicht gesendet wurden. Alle E-Mails für einfache Produkte sind in Ordnung, aber wenn es um konfigurierbare Produkte geht, ist hier mein Problem:

Derzeit können sich Kunden für die Bestandsbenachrichtigungs-E-Mails anmelden. Der Cron-Job läuft einwandfrei, und das System sendet sie logischerweise nur, wenn sie tatsächlich auf Lager sind und nicht auf 0 gesetzt sind. Die konfigurierbaren Produkte werden jedoch immer auf 0 gesetzt, und die einfachen Produkte, die zu dieser konfigurierbaren gehören, ändern den Lagerbestand. Was jetzt passiert, ist, dass Menschen ein Produkt nur abonnieren können, wenn ALLE Größen nicht vorrätig sind (also nicht einmal eine Größe auswählen können, über die sie Informationen erhalten möchten), sondern wenn die Schuhe beispielsweise wieder aufgefüllt werden erhalten sie keine Benachrichtigung, da die konfigurierbare (das Produkt, das sie abonniert haben) immer noch bei 0 liegt.

Ich bin sicher, dass ich nicht die erste Person bin, die auf dieses Problem stößt, also habe ich mich gefragt, ob jemand in der Lage war, es zu umgehen oder eine Lösung zu finden?

Antworten:


1

Es hört sich so an, als müssten Sie Ihren Code an zwei Stellen anpassen. Zunächst prüft Ihr Code für jedes Produkt, ob Kunden es abonnieren dürfen. Zweitens, wo Ihr Code (der Cron-Job, den ich annehme) Bestandsänderungen für die Produkte überprüft.

In erster Linie können Sie ein Abonnement zulassen, wenn eines der untergeordneten Produkte nicht vorrätig ist:

    $allowSubscriptionForProduct = false;
    if ($product->getData('type_id') == 'configurable') {
        $childProductIds = Mage::getModel('catalog/product_type_configurable')
            ->getChildrenIds($product->getId())
        foreach ($childProductIds[0] as $childProductId) {
            $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($childProductId);
            if ($stock->getData('is_in_stock') == 1) {
                $allowSubscriptionForProduct = true;
                break;
            }
        }
    }
    if ($allowSubscriptionForProduct === true) {
        // change a product attribute to let customers subscribe to this product. 
    }

NB: $ childProductIds hat eine seltsame Struktur. Ich würde ein Array von IDs erwarten, aber getChildrenIds () verpackt dieses Array in ein anderes Array. Daher die [0] in der foreach-Schleife.

In der zweiten Instanz müssen Sie vom untergeordneten Produkt zum übergeordneten konfigurierbaren Produkt wechseln.

    foreach ($simpleProductThatWasOutOfStock as $outOfStockSimpleProduct) {
        $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($outOfStockSimpleProduct->getId());
        if ($stock->getData('is_in_stock') == 1) {
            $configurableProductIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($outOfStockSimpleProduct->getId())
            foreach ($configurableProductIds as $configurableProductId) {
                // use the code that schedules/sends the email notifications 
            }
        }
    }

Ohne den tatsächlich verwendeten Code ist es schwierig, genauer zu sein. Ich hoffe, das bringt Sie zumindest auf den richtigen Weg.

Diese Einträge können auch nützlich sein. So überprüfen Sie den Lagerstatus:

https://stackoverflow.com/a/2703800

https://stackoverflow.com/a/31612963

Vom untergeordneten Produkt zum konfigurierbaren übergeordneten Produkt:

https://stackoverflow.com/a/1706297

https://magento.stackexchange.com/a/30245


0

Möglicherweise müssen Sie benutzerdefinierten Code verwenden oder eine Erweiterung verwenden, die Funktionen wie konfigurierbare Produktarbeit basierend auf dem Hauptprodukt und nicht gemäß dem einfachen Produkt bietet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.