Magento Enterprise 1.14.1.0 - Reglas de precios del carrito de compras - Promoción - Error fatal Nivel máximo de anidamiento de funciones alcanzado

8

He estado jugando con las Reglas de precios del carrito de compras para Magento Enterprise 1.14.1.0 y me he topado con un problema.

Estaba tratando de crear una regla simple para que obtendría un descuento de £ 10 si compra 3 artículos de una categoría definida, y ha gastado más de £ 15. Vea mi configuración a continuación.

Información de la regla Condiciones Comportamiento

En mi cesta tengo 3 artículos de la categoría con identificación 5y 1 artículo de la categoría con identificación 3.

Cuando habilito esta regla y veo mi cesta, recibo el error fatal. Aquí hay una sección del seguimiento de la pila. Como puede ver, ya he subido xdebug.max_nesting_levela niveles horripilantes.

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

Cuando elimino la If total quantity is 3sección del ConditionMagento ya no se asusta. ¿Podría alguien señalarme la forma correcta de configurar esta promoción, y arrojar algo de luz sobre por qué estoy fatal?

Esta es una instalación básica de Magento, y me preocupa que pueda romper el carrito de compras tan fácilmente.

Actualizar

Estoy ejecutando mysql como

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

Y PHP como

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

Actualización 2

Un volcado de la base de datos está disponible aquí, viene a ~ 130kb.

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

  • Fue creado con mysql ejecutándolo como root @ localhost sin contraseña
  • El nombre de usuario del panel de administración de Magento es adminy la contraseña espassword1
  • Tendrá que actualizar el web/unsecure/base_urly web/secure/base_urlen core_config_dataque punto a la instancia de instalación.

Para replicar

  1. Como invitado, agregue 1 Green Bowler a su cesta
  2. Luego agregue 3 botas verdes a su cesta
  3. Esperemos tener un error horrible como el que estoy viendo
Luke Rodgers
fuente
Recreé las mismas reglas de su carrito de compras y pude aplicar sin problemas en una instalación de vainilla 1.41.1.0. ¿Qué tipos de productos está intentando agregar al carrito para activar la regla? ¿Has intentado hacer una reindexación
B00MER
Ambos productos son configurables. Acabo de ejecutar un magerun index:reindex:ally no hizo ninguna diferencia. Estoy súper ocupado hoy y mañana en el trabajo, pero si aún no puedes replicar, ¿podré proporcionar un volcado de DB el jueves si eso es bueno?
Luke Rodgers
Un volcado de DB ayudaría, siempre que no sea súper grande. Desde 1.14.1.0 es lo último que conozco y también he experimentado algunas rarezas con las reglas de promoción. Es posible que sea un error.
B00MER
Genial, te lo conseguiré en unas horas. Gracias.
Luke Rodgers,
Revisa las actualizaciones de la publicación. Tiene un enlace al volcado de la base de datos y algunas notas.
Luke Rodgers

Respuestas:

7

tomó el cambio para sumergirse en esto. Instaló un Magento Enterprise 1.14.1.0 limpio

Tu regla aún se rompe sin la primera >15 rule...

Su origen está en la subselección del producto.

Estas dos funciones se llaman a sí mismas repetidamente.

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

Mas especifico:

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

Como puede ver, si el producto es configurable (lo que en su caso es cierto para ambos productos), vuelva a llamar a la función extendida. Y así sucesivamente, y así sucesivamente, y así sucesivamente ...

De hecho, es un error de Magento porque no comprueba si es un elemento válido pasado a la función.

Normalmente, la función se llama con Mage_Sales_Model_Quote_Addressy en la recursividad con Mage_Sales_Model_Quote_Itempara que podamos construir una solución para ella. Ambos también tienen una función getQuote ().

Si desea resolverlo en su caso, se hace agregando estas líneas de árbol.

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

Puede copiar este archivo en app / code / local / Mage / SalesRule / Model / Rule / Condition / Product / Subselect.php

Así que mi última comprobación es ver si también se aplica a Magento CE 1.9.1.0. Este también es el caso porque la función principal se implementa en la edición CE. ¡Magento CE 1.9.0.1 no se ve afectado, no tiene la función padre! Así que supongo que Magento EE 1.13.1.0 también está libre de esto, porque son inherentes entre sí.

Debe crear un ticket en su cuenta de Magento Enterprise y proporcionar la información para que puedan hacer un parche para esto.

Jeroen
fuente
Por lo tanto, está en Magento CE 1.9.1.0 y superior, me lo perdí la última vez ... extraño ... Archivará un error en Magento's
Jeroen