E-mails de notification de stock pour les produits configurables


8

J'ai récemment rencontré un problème avec un magasin, lorsque j'ai commencé à remarquer que certains e-mails de notification de stock n'étaient pas envoyés. Tous les e-mails pour les produits simples sont corrects, mais en ce qui concerne les produits configurables, voici mon problème:

À l'heure actuelle, les clients peuvent s'inscrire aux e-mails de notification de stock. La tâche cron s'exécute correctement et le système ne les envoie logiquement que lorsqu'ils sont réellement en stock et non définis sur 0. Les produits configurables sont cependant toujours définis sur 0 et les produits simples qui appartiennent à cette configuration configurent le stock. Donc, ce qui se passe maintenant, c'est que les gens ne peuvent s'abonner à un produit que lorsque TOUTES les tailles sont en rupture de stock (donc même pas en mesure de sélectionner une taille sur laquelle ils souhaitent recevoir des informations), mais ensuite lorsque les chaussures, par exemple, sont réapprovisionnées , ils ne reçoivent pas de notification car le configurable (qui est le produit auquel ils sont abonnés) est toujours à 0.

Je suis sûr que je ne suis pas la première personne à rencontrer ce problème, alors je me demandais si quelqu'un avait pu contourner ce problème ou trouver une solution?

Réponses:


1

Il semble que vous devrez ajuster votre code à deux endroits. Tout d'abord, où votre code vérifie pour chaque produit si les clients sont autorisés à s'y abonner. Deuxièmement, où votre code (le travail cron je suppose) vérifie les changements de stock pour les produits.

Dans le premier cas, vous pouvez autoriser l'abonnement si l'un des produits enfants est en rupture de stock:

    $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 a une structure étrange. Je m'attendrais à un tableau d'identifiants, mais getChildrenIds () enveloppe ce tableau dans un autre tableau. D'où le [0] dans la boucle foreach.

Dans le deuxième cas, vous devez passer du produit enfant au produit configurable parent.

    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 
            }
        }
    }

Sans le code réel que vous utilisez, il est difficile d'être plus précis. J'espère que cela vous met au moins sur la bonne voie.

Ces entrées peuvent également être utiles. Pour vérifier l'état du stock:

https://stackoverflow.com/a/2703800

https://stackoverflow.com/a/31612963

Passer du produit enfant au parent configurable:

https://stackoverflow.com/a/1706297

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


0

Vous devrez peut-être personnaliser le code ou utiliser une extension qui fournit des fonctionnalités telles que le travail de produit configurable basé sur le produit principal et non selon le produit simple.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.