Magento Enterprise 1.14.1.0 - Regole dei prezzi del carrello - Promozione - Errore irreversibile Livello massimo di annidamento della funzione raggiunto


8

Ho giocato con le Regole sui prezzi del carrello per Magento Enterprise 1.14.1.0 e mi sono imbattuto in un problema.

Stavo cercando di creare una semplice regola in modo da ottenere uno sconto di £ 10 se acquisti 3 articoli da una categoria definita e hai speso più di £ 15. Vedi la mia configurazione qui sotto.

Informazioni sulle regole condizioni Azioni

Nel mio carrello ho 3 articoli della categoria con ID 5e 1 oggetto della categoria con ID 3.

Quando abilito questa regola e visualizzo il mio carrello, ricevo l'errore irreversibile. Ecco una sezione della traccia dello stack. Come puoi vedere, ho già raggiunto xdebug.max_nesting_levellivelli orribili.

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

Quando rimuovo la If total quantity is 3sezione da Conditionallora Magento non impazzisce più. Qualcuno potrebbe indicarmi il modo corretto di configurare questa promozione, oltre a far luce sul perché sono fatale?

Questa è un'installazione alla vaniglia di Magento e temo di poter rompere il carrello così facilmente.

Aggiornare

Sto eseguendo mysql come

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

E PHP come

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

Aggiornamento 2

Un dump del database è disponibile qui, arriva a ~ 130kb.

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

  • È stato creato con mysql eseguendolo come root @ localhost senza password
  • Il nome utente del pannello di amministrazione di Magento è admine la password èpassword1
  • Avrete bisogno di aggiornare il web/unsecure/base_urle web/secure/base_urlin core_config_dataal punto all'istanza installare.

Replicare

  1. Come ospite, aggiungi 1 bombetta verde al carrello
  2. Quindi aggiungi 3 stivali verdi al carrello
  3. Spero di avere un errore orribile come sto vedendo

Ho ricreato le stesse regole del carrello e sono stato in grado di applicare senza problemi su un'installazione vanilla 1.41.1.0. Quali tipi di prodotti stai tentando di aggiungere al carrello per attivare la regola? Hai provato a fare un reindicizzazione completa e / o l'aggiunta di qualsiasi codice di debug, in particolare a github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/…
B00MER

Entrambi i prodotti sono configurabili. Ho appena corso un magerun index:reindex:alle non ha fatto differenza. Sono super impegnato oggi e domani al lavoro, ma se non riesci ancora a replicare, potrò fornire un dump del DB giovedì se va bene?
Luke Rodgers,

Un dump di DB sarebbe di aiuto, purché non sia super grande. Dal 1.14.1.0 è l'ultimo di cui sono a conoscenza e ho sperimentato alcune stranezze anche con le regole promozionali. È possibile che possa essere un bug.
B00MER,

Bene, te lo prenderò tra poche ore. Grazie.
Luke Rodgers,

Controlla gli aggiornamenti al post. Ha un collegamento al dump del DB e alcune note.
Luke Rodgers,

Risposte:


7

ha preso la modifica per immergersi in questo. Installato un Magento Enterprise 1.14.1.0 pulito

La tua regola si rompe ancora senza il primo >15 rule...

La sua origine è nella sottosezione del prodotto.

Queste due funzioni che si chiamano ripetutamente.

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

Più specifico:

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()

Come puoi vedere, se il prodotto è configurabile (che in realtà è il tuo caso per entrambi i prodotti) chiama di nuovo la funzione estesa. E così via, e ancora, e ancora, e ancora ...

È davvero un bug di Magento perché non controlla se si tratta di un elemento valido passato alla funzione.

Normalmente la funzione viene chiamata con Mage_Sales_Model_Quote_Addresse nella ricorsione con in Mage_Sales_Model_Quote_Itemmodo da poter costruire una correzione per essa. Entrambi hanno anche una funzione getQuote ().

Se vuoi risolverlo nel tuo caso, lo fai aggiungendo queste linee dell'albero.

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

È possibile copiare questo file in app / code / local / Mage / SalesRule / Model / Rule / Condition / Product / Subselect.php

Quindi il mio ultimo controllo è vedere se vale anche per Magento CE 1.9.1.0 Questo è anche il caso perché la funzione genitore è implementata nell'edizione CE. Magento CE 1.9.0.1 non è interessato, non ha la funzione genitore! Quindi suppongo che Magento EE 1.13.1.0 sia anche libero da questo, perché sono inerenti l'uno all'altro.

Devi creare un ticket nel tuo account Magento Enterprise e fornire le informazioni in modo che possano creare una patch per questo.


Quindi è in Magento CE 1.9.1.0 e versioni successive, l'ho perso l'ultima volta ... strano ... Farò un bug da Magento
Jeroen

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.