Magento Enterprise 1.14.1.0 - Preisregeln für Einkaufswagen - Promotion - Schwerwiegender Fehler Maximale Funktionsverschachtelungsstufe erreicht

8

Ich habe mit den Einkaufswagen-Preisregeln für Magento Enterprise 1.14.1.0 herumgespielt und bin auf ein Problem gestoßen.

Ich habe versucht, eine einfache Regel zu erstellen, nach der Sie einen Rabatt von 10 £ erhalten, wenn Sie 3 Artikel aus einer definierten Kategorie kaufen und mehr als 15 £ ausgegeben haben. Siehe meine Konfiguration unten.

Regelinformationen Bedingungen Aktionen

In meinem Warenkorb befinden sich 3 Artikel aus der Kategorie mit ID 5und 1 Artikel aus der Kategorie mit ID 3.

Wenn ich diese Regel aktiviere und meinen Warenkorb ansehe, wird der schwerwiegende Fehler angezeigt. Hier ist ein Abschnitt der Stapelverfolgung. Wie Sie sehen, habe ich das bereits xdebug.max_nesting_levelauf ein schreckliches Niveau gebracht.

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

Wenn ich den If total quantity is 3Abschnitt aus dem Conditiondann entferne, flippt Magento nicht mehr aus. Könnte mich jemand auf die richtige Art und Weise hinweisen, um diese Aktion zu konfigurieren, und etwas Licht ins Dunkel bringen, warum ich tödlich bin?

Dies ist eine Vanille-Installation von Magento, und ich mache mir Sorgen, dass ich den Einkaufswagen so leicht zerbrechen kann.

Aktualisieren

Ich verwende MySQL als

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

Und PHP als

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

Ein Datenbank-Dump ist hier verfügbar und liegt bei ~ 130 KB.

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

  • Wurde mit MySQL erstellt, das als root @ localhost ohne Passwort ausgeführt wird
  • Der Benutzername des Magento Admin Panels lautet adminund das Passwort lautetpassword1
  • Sie müssen das web/unsecure/base_urlund web/secure/base_urlin aktualisieren core_config_data, um auf Ihre Installationsinstanz zu verweisen.

Zu replizieren

  1. Fügen Sie als Gast 1 Green Bowler zu Ihrem Warenkorb hinzu
  2. Dann lege 3 grüne Stiefel in deinen Warenkorb
  3. Hoffentlich habe ich einen schrecklichen Fehler, wie ich sehe
Luke Rodgers
quelle
Ich habe dieselben Warenkorbregeln neu erstellt und kann sie problemlos auf eine Vanilla 1.41.1.0-Installation anwenden. Welche Produkttypen möchten Sie dem Warenkorb hinzufügen, um die Regel auszulösen? Haben Sie versucht, einen vollständigen
Neuindex durchzuführen
Beide Produkte sind konfigurierbar. Ich bin gerade eine gelaufen magerun index:reindex:allund es machte keinen Unterschied. Ich bin heute und morgen bei der Arbeit sehr beschäftigt, aber wenn Sie immer noch nicht replizieren, kann ich am Donnerstag einen DB-Dump bereitstellen, wenn das gut ist?
Luke Rodgers
Ein DB-Dump würde helfen, solange er nicht sehr groß ist. Seit 1.14.1.0 ist mir das Neueste bekannt und ich habe auch einige Kuriositäten mit Promo-Regeln erlebt. Es ist möglich, dass es sich um einen Fehler handelt.
B00MER
Cool, das hole ich dir in ein paar Stunden. Vielen Dank.
Luke Rodgers
Überprüfen Sie die Aktualisierungen des Beitrags. Es hat einen Link zum DB-Dump und ein paar Notizen.
Luke Rodgers

Antworten:

7

nahm die Änderung, um in diese einzutauchen. Installierte ein sauberes Magento Enterprise 1.14.1.0

Ihre Regel bricht immer noch ohne die erste >15 rule...

Der Ursprung liegt in der Produktunterauswahl.

Diese beiden Funktionen, die sich wiederholt aufrufen.

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

Spezifischer:

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

Wie Sie sehen können, rufen Sie die erweiterte Funktion erneut auf, wenn das Produkt konfigurierbar ist (was in Ihrem Fall für beide Produkte der Fall ist). Und so weiter und so weiter und so fort ...

Es ist in der Tat ein Magento-Fehler, da nicht überprüft wird, ob es sich um ein gültiges Element handelt, das an die Funktion übergeben wurde.

Normalerweise wird die Funktion mit Mage_Sales_Model_Quote_Addressund in der Rekursion mit aufgerufen, Mage_Sales_Model_Quote_Itemdamit wir einen Fix dafür erstellen können. Beide haben auch eine getQuote () -Funktion.

Wenn Sie es in Ihrem Fall lösen möchten, fügen Sie diese Baumlinien hinzu.

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

Sie können diese Datei nach app / code / local / Mage / SalesRule / Model / Rule / Condition / Product / Subselect.php kopieren

Meine letzte Prüfung besteht also darin, festzustellen, ob dies auch für Magento CE 1.9.1.0 gilt. Dies ist auch der Fall, weil die übergeordnete Funktion in der CE-Edition implementiert ist. Magento CE 1.9.0.1 ist nicht betroffen, es hat nicht die übergeordnete Funktion! Ich vermute also, dass Magento EE 1.13.1.0 auch davon frei ist, weil die einander inhärent sind.

Sie sollten ein Ticket in Ihrem Magento Enterprise-Konto erstellen und die Informationen angeben, damit sie einen Patch dafür erstellen können.

Jeroen
quelle
So ist es in Magento CE 1.9.1.0 und höher, ich habe es das letzte Mal verpasst ... seltsam ... Wird einen Fehler bei Magento einreichen
Jeroen
2
Fehler behoben
Jeroen