Magento Enterprise 1.14.1.0 - Règles de prix du panier - Promotion - Erreur fatale Niveau d'imbrication maximum des fonctions atteint

8

J'ai joué avec les règles de prix du panier pour Magento Enterprise 1.14.1.0 et j'ai rencontré un problème.

J'essayais de créer une règle simple telle que vous obtiendrez une remise de 10 £ si vous achetez 3 articles dans une catégorie définie et que vous avez dépensé plus de 15 £. Voir ma configuration ci-dessous.

Informations sur les règles Conditions Actions

Dans mon panier, j'ai 3 articles de la catégorie avec id 5, et 1 article de la catégorie avec id 3.

Lorsque j'active cette règle et que je consulte mon panier, je reçois l'erreur fatale. Voici une section de la trace de pile. Comme vous pouvez le voir, j'ai déjà atteint xdebug.max_nesting_leveldes niveaux horribles.

Fatal error: Maximum function nesting level of '18000' reached, aborting! in /dev/builds/1_14_1_0/lib/Varien/Object.php on line 344 Call Stack:
0.0003 348680 1. {main}() /dev/builds/1_14_1_0/index.php:0
0.0020 694956 2.Mage::run() /dev/builds/1_14_1_0/index.php:89
0.0068 1819640 3.Mage_Core_Model_App->run() /dev/builds/1_14_1_0/app/Mage.php:684
0.0509 9129168 4.Mage_Core_Controller_Varien_Front->dispatch() /dev/builds/1_14_1_0/app/code/core/Mage/Core/Model/App.php:354
0.0626 11074424 5. Mage_Core_Controller_Varien_Router_Standard->match() /dev/builds/1_14_1_0/app/code/core/Mage/Core/Controller/Varien/Front.php:172
0.0658 11765288 6. Mage_Core_Controller_Varien_Action->dispatch() /dev/builds/1_14_1_0/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php:250
0.1314 16963044 7. Mage_Checkout_CartController->indexAction() /dev/builds/1_14_1_0/app/code/core/Mage/Core/Controller/Varien/Action.php:418
0.3065 27313592 8. Mage_Checkout_Model_Cart->save() /dev/builds/1_14_1_0/app/code/core/Mage/Checkout/controllers/CartController.php:144
0.3195 28006864 9. Mage_Sales_Model_Quote->collectTotals() /dev/builds/1_14_1_0/app/code/core/Mage/Checkout/Model/Cart.php:458
0.3827 32507432 10. Mage_Sales_Model_Quote_Address->collectTotals() /dev/builds/1_14_1_0/app/code/core/Mage/Sales/Model/Quote.php:1331
0.6151 37466752 11. Mage_SalesRule_Model_Quote_Freeshipping->collect() /dev/builds/1_14_1_0/app/code/core/Mage/Sales/Model/Quote/Address.php:1013
0.6245 37839108 12. Mage_SalesRule_Model_Validator->processFreeShipping() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Quote/Freeshipping.php:74
0.6247 37839784 13. Mage_SalesRule_Model_Validator->_canProcessRule() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Validator.php:249
0.6282 37960924 14. Mage_Rule_Model_Abstract->validate() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Validator.php:223
0.6418 38895940 15. Mage_Rule_Model_Condition_Combine->validate() /dev/builds/1_14_1_0/app/code/core/Mage/Rule/Model/Abstract.php:353
0.6420 38896372 16. Mage_SalesRule_Model_Rule_Condition_Product_Subselect->validate() /dev/builds/1_14_1_0/app/code/core/Mage/Rule/Model/Condition/Combine.php:307
0.6421 38896772 17. Mage_SalesRule_Model_Rule_Condition_Product_Combine->validate() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product/Subselect.php:117
0.6428 38898084 18. Mage_SalesRule_Model_Rule_Condition_Product_Subselect->validate() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product/Combine.php:219
0.6429 38898484 19. Mage_SalesRule_Model_Rule_Condition_Product_Combine->validate() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product/Subselect.php:117
0.6433 38898572 20. Mage_SalesRule_Model_Rule_Condition_Product_Subselect->validate() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product/Combine.php:219
0.6434 38898972 21. Mage_SalesRule_Model_Rule_Condition_Product_Combine->validate() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product/Subselect.php:117
0.6439 38899060 22. Mage_SalesRule_Model_Rule_Condition_Product_Subselect->validate() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product/Combine.php:219
0.6440 38899460 23. Mage_SalesRule_Model_Rule_Condition_Product_Combine->validate() /dev/builds/1_14_1_0/app/code/core/Mage/SalesRule/Model/Rule/Condition/Product/Subselect.php:117

Lorsque je supprime la If total quantity is 3section de ConditionMagento, cela ne panique plus. Quelqu'un pourrait-il m'indiquer la bonne façon de configurer cette promotion, ainsi que faire la lumière sur la raison pour laquelle je suis fatal?

Il s'agit d'une installation vanille de Magento, et je crains de ne pas pouvoir casser le panier si facilement.

Mise à jour

J'utilise mysql en tant que

Server version: 5.5.41-0ubuntu0.12.04.1 (Ubuntu)

Et PHP comme

PHP 5.3.10-1ubuntu3.15 with Suhosin-Patch (cli) (built: Oct 29 2014 12:16:30) 
    Copyright (c) 1997-2012 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
        with the ionCube PHP Loader v4.0.10, Copyright (c) 2002-2011, by ionCube Ltd., and
        with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

Update 2

Un vidage de la base de données est disponible ici, arrive à ~ 130kb.

http://www.lukerodgers.co.uk/files/vanilla_1_14_1_0.sql.gz

  • A été créé avec mysql en l'exécutant en tant que root @ localhost sans mot de passe
  • Le nom d'utilisateur du panneau d'administration Magento est adminet le mot de passe estpassword1
  • Vous devrez mettre à jour le web/unsecure/base_urlet web/secure/base_urlvers core_config_datapour pointer vers votre instance d'installation.

Pour répliquer

  1. En tant qu'invité, ajoutez 1 Green Bowler à votre panier
  2. Ajoutez ensuite 3 bottes vertes à votre panier
  3. J'espère avoir une horrible erreur comme je vois
Luke Rodgers
la source
J'ai recréé vos mêmes règles de panier et j'ai pu l'appliquer sans problème sur une installation de vanilla 1.41.1.0. Quels types de produits essayez-vous d'ajouter au panier pour déclencher la règle? Avez-vous essayé de faire un ré-index complet et / ou d'ajouter un code de débogage, en particulier à github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/…
B00MER le
Les deux produits sont configurables. Je viens de courir un magerun index:reindex:allet cela n'a fait aucune différence. Je suis très occupé aujourd'hui et demain au travail, mais si vous ne parvenez toujours pas à répliquer, je serai en mesure de fournir un vidage de base de données jeudi si c'est bon?
Luke Rodgers le
Un vidage de la base de données aiderait, tant qu'il n'est pas super volumineux. Depuis la version 1.14.1.0, je suis au courant et j'ai également connu des bizarreries avec les règles promotionnelles. Il est possible que ce soit un bug.
B00MER
Cool, je te le donnerai dans quelques heures. Je vous remercie.
Luke Rodgers
Vérifiez les mises à jour du message. Il a un lien vers le vidage de la base de données et quelques notes.
Luke Rodgers le

Réponses:

7

a pris le changement pour plonger dans cela. Installation d'un Magento Enterprise 1.14.1.0 propre

Votre règle casse toujours sans le premier >15 rule...

Son origine est dans la sous-sélection du produit.

Ces deux fonctions qui s'appellent à plusieurs reprises.

Mage_SalesRule_Model_Rule_Condition_Product_Combine->validate()
Mage_SalesRule_Model_Rule_Condition_Product_Subselect->validate()

Plus spécifique:

Mage_SalesRule_Model_Rule_Condition_Product_Subselect: 118

foreach ($object->getQuote()->getAllVisibleItems() as $item) {
    if (parent::validate($item)) { // Call parent

Mage_SalesRule_Model_Rule_Condition_Product_Combine: 216

$valid = parent::validate($object);
if (!$valid && $product->getTypeId() == Mage_Catalog_Model_Product_Type_Configurable::TYPE_CODE) {
    $children = $object->getChildren();
    $valid = $children && $this->validate($children[0]); // call upper function, I not aware I'm really calling Product_Select::validate()

Comme vous pouvez le voir, si le produit est configurable (ce qui est vrai pour les deux produits), appelez à nouveau la fonction étendue. Et ainsi de suite, et ainsi de suite, et ainsi de suite ...

Il s'agit en effet d'un bug Magento car il ne vérifie pas s'il s'agit d'un élément valide passé à la fonction.

Normalement, la fonction est appelée avec Mage_Sales_Model_Quote_Addresset dans la récursivité avec Mage_Sales_Model_Quote_Itemafin que nous puissions construire un correctif pour elle. Les deux ont également une fonction getQuote ().

Si vous voulez le résoudre dans votre cas, cela se fait en ajoutant ces lignes d'arbre.

Mage_SalesRule_Model_Rule_Condition_Product_Subselect

/**
 * validate
 *
 * @param Varien_Object $object Quote
 * @return boolean
 */
public function validate(Varien_Object $object)
{
    // Check if recursion is the case, ask parent to handle
    // *** START FIX
    if ($object instanceof Mage_Sales_Model_Quote_Item) {
        return parent::validate($object);
    }
    // *** END FIX

    if (!$this->getConditions()) {
        return false;
    }

Vous pouvez copier ce fichier dans app / code / local / Mage / SalesRule / Model / Rule / Condition / Product / Subselect.php

Donc, ma dernière vérification est de voir si cela s'applique également à Magento CE 1.9.1.0. C'est également le cas car la fonction parent est implémentée dans l'édition CE. Magento CE 1.9.0.1 n'est pas affecté, il n'a pas la fonction parent! Je suppose donc que Magento EE 1.13.1.0 est également exempt de cela, car ils sont inhérents les uns aux autres.

Vous devez créer un ticket dans votre compte Magento Enterprise et fournir les informations afin qu'ils puissent créer un patch pour cela.

Jeroen
la source
Donc, c'est dans Magento CE 1.9.1.0 et plus, je l'ai raté la dernière fois ... étrange ... Va déposer un bug chez Magento
Jeroen
2
Déposé un bug
Jeroen