Magento Enterprise 1.14.1.0 - Quy tắc giá giỏ hàng - Khuyến mãi - Lỗi nghiêm trọng Mức độ lồng tối đa đạt được


8

Tôi đã chơi xung quanh với Quy tắc giá giỏ hàng cho Magento Enterprise 1.14.1.0 và đã vấp phải một vấn đề.

Tôi đã cố gắng tạo một quy tắc đơn giản để bạn được giảm giá £ 10 nếu bạn mua bất kỳ 3 mặt hàng nào từ một danh mục xác định và đã chi hơn 15 bảng. Xem cấu hình của tôi dưới đây.

Thông tin quy tắc Điều kiện Hành động

Trong giỏ hàng của tôi, tôi có 3 mục từ danh mục có id 5và 1 mục từ danh mục có id 3.

Khi tôi kích hoạt quy tắc này và xem giỏ hàng của mình, tôi nhận được lỗi nghiêm trọng. Đây là một phần của dấu vết ngăn xếp. Như bạn có thể thấy tôi đã tăng xdebug.max_nesting_levelđến mức khủng khiếp.

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

Khi tôi loại bỏ If total quantity is 3phần Conditionđó thì Magento không còn bối rối nữa. Ai đó có thể chỉ cho tôi cách chính xác để định cấu hình chương trình khuyến mãi này không, cũng như làm sáng tỏ lý do tại sao tôi lại béo?

Đây là bản cài đặt vanilla của Magento và tôi lo ngại rằng tôi có thể phá vỡ giỏ hàng một cách dễ dàng.

Cập nhật

Tôi đang chạy mysql như

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

Và PHP là

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

Cập nhật 2

Một bãi chứa cơ sở dữ liệu có sẵn ở đây, có giá ~ 130kb.

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

  • Được tạo bằng mysql chạy nó dưới dạng root @ localhost không có mật khẩu
  • Tên người dùng bảng quản trị Magento là adminvà mật khẩu làpassword1
  • Bạn sẽ cần cập nhật web/unsecure/base_urlweb/secure/base_urlvào core_config_datađể trỏ đến phiên bản cài đặt của bạn.

Nhân rộng

  1. Là khách, Thêm 1 Green Bowler vào giỏ hàng của bạn
  2. Sau đó, thêm 3 đôi giày xanh vào giỏ hàng của bạn
  3. Hy vọng có một lỗi khủng khiếp như tôi đang thấy

Tôi đã tạo lại quy tắc giỏ hàng tương tự của bạn và có thể áp dụng mà không gặp sự cố nào khi cài đặt vanilla 1.41.1.0. Những loại sản phẩm bạn đang cố gắng thêm vào giỏ hàng để kích hoạt quy tắc? Bạn đã thử thực hiện lập chỉ mục lại đầy đủ và / hoặc thêm bất kỳ mã gỡ lỗi nào, đặc biệt là github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/iêu
B00mer

Cả hai sản phẩm đều có cấu hình. Tôi chỉ chạy một magerun index:reindex:allvà nó không có sự khác biệt. Tôi siêu bận rộn hôm nay và ngày mai tại nơi làm việc, nhưng nếu bạn vẫn không sao chép, tôi sẽ có thể cung cấp một bãi chứa DB vào thứ năm nếu điều đó tốt?
Luke Rodgers

Một bãi chứa DB sẽ giúp ích, miễn là nó không quá lớn. Vì 1.14.1.0 là nhận thức mới nhất và tôi cũng đã trải qua một số điều kỳ lạ với các quy tắc quảng cáo. Có thể nó là một lỗi.
B00mer

Thật tuyệt, tôi sẽ lấy nó cho bạn sau vài giờ. Cảm ơn bạn.
Luke Rodgers

Kiểm tra các bản cập nhật cho bài viết. Nó có một liên kết đến bãi chứa DB và một vài ghi chú.
Luke Rodgers

Câu trả lời:


7

đã thay đổi để đi sâu vào điều này. Đã cài đặt Magento Enterprise 1.14.1.0 sạch

Quy tắc của bạn vẫn bị phá vỡ mà không có >15 rule...

Đó là nguồn gốc trong phân ngành sản phẩm.

Hai chức năng đang gọi chính nó nhiều lần.

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

Cụ thể hơn:

Mage_SalesRule_Model_Rule_Condition_ Productt_Subelect: 118

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

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

Như bạn có thể thấy, nếu sản phẩm là cấu hình (trong trường hợp thực sự của bạn cho cả hai sản phẩm), hãy gọi lại chức năng mở rộng. Vân vân và vân vân, vân vân và ...

Đây thực sự là một lỗi Magento vì nó không kiểm tra xem đó có phải là một mục hợp lệ được truyền cho hàm không.

Thông thường hàm được gọi với Mage_Sales_Model_Quote_Address và trong đệ quy với Mage_Sales_Model_Quote_Itemvì vậy chúng ta có thể xây dựng một bản sửa lỗi cho nó. Cả hai cũng có hàm getQuote ().

Nếu bạn muốn giải quyết nó trong trường hợp của bạn, nó được thực hiện bằng cách thêm các dòng cây này.

Mage_SalesRule_Model_Rule_Condition_ Productt_Subelect

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

Bạn có thể sao chép tệp này vào ứng dụng / mã / cục bộ / Mage / SalesRule / Model / Rule / condition / Product / subselect.php

Vì vậy, kiểm tra cuối cùng của tôi là để xem liệu nó cũng áp dụng cho Magento CE 1.9.1.0 Đây cũng là trường hợp vì chức năng cha được thực hiện trong phiên bản CE. Magento CE 1.9.0.1 không bị ảnh hưởng, nó không có chức năng cha! Vì vậy, tôi đoán Magento EE 1.13.1.0 cũng miễn phí vì điều này là do vốn có của nhau.

Bạn nên tạo một vé trong tài khoản Magento Enterprise của bạn và cung cấp thông tin để họ có thể tạo một bản vá cho việc này.


Vì vậy, đó là trong Magento CE 1.9.1.0 trở lên, tôi đã bỏ lỡ lần cuối cùng ... lạ ... Sẽ gửi một lỗi tại Magento
Jeroen

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.