Magento Enterprise 1.14.1.0 - Aturan Harga Keranjang Belanja - Promosi - Kesalahan fatal Tingkat maksimum fungsi bersarang tercapai

8

Saya telah bermain-main dengan Aturan Harga Keranjang Belanja untuk Magento Enterprise 1.14.1.0 dan telah menemukan masalah.

Saya mencoba membuat aturan sederhana sehingga Anda akan mendapatkan diskon £ 10 jika Anda membeli 3 item dari kategori yang ditentukan, dan telah menghabiskan lebih dari £ 15. Lihat konfigurasi saya di bawah ini.

Informasi Peraturan Kondisi Tindakan

Dalam keranjang saya, saya memiliki 3 item dari kategori dengan id 5, dan 1 item dari kategori dengan id 3.

Ketika saya mengaktifkan aturan ini dan melihat keranjang saya, saya menerima kesalahan fatal. Inilah bagian dari jejak tumpukan. Seperti yang bisa Anda lihat, saya sudah mencapai xdebug.max_nesting_leveltingkat yang mengerikan.

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

Ketika saya menghapus If total quantity is 3bagian dari ConditionMagento maka tidak lagi panik. Bisakah seseorang menunjukkan saya cara yang benar untuk mengkonfigurasi promosi ini, dan juga menjelaskan mengapa saya menjadi gemuk?

Ini adalah instalasi vanilla dari Magento, dan saya khawatir saya bisa memecahkan keranjang belanja dengan mudah.

Memperbarui

Saya menjalankan mysql as

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

Dan PHP sebagai

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

Perbarui 2

Database dump tersedia di sini, datang pada ~ 130kb.

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

  • Dibuat dengan mysql menjalankannya sebagai root @ localhost tanpa kata sandi
  • Nama pengguna panel admin Magento adalah admindan kata sandinyapassword1
  • Anda harus memperbarui web/unsecure/base_urldan web/secure/base_urldi core_config_datatitik untuk menginstal Misalnya Anda.

Untuk mereplikasi

  1. Sebagai tamu, Tambahkan 1 Green Bowler ke keranjang Anda
  2. Kemudian Tambahkan 3 Sepatu Hijau ke keranjang Anda
  3. Semoga ada kesalahan mengerikan seperti yang saya lihat
Luke Rodgers
sumber
Saya membuat ulang aturan keranjang belanja yang sama, dan dapat menerapkan tanpa masalah pada pemasangan vanilla 1.41.1.0. Jenis produk apa yang Anda coba tambahkan ke troli untuk memicu aturan? Sudahkah Anda mencoba melakukan pengindeksan ulang penuh dan / atau menambahkan kode debug, khususnya ke github.com/OpenMage/magento-mirror/blob/magento-1.9/app/code/…
B00MER
Kedua produk dapat dikonfigurasi. Saya hanya menjalankan magerun index:reindex:alldan tidak ada bedanya. Saya sangat sibuk hari ini dan besok di tempat kerja, tetapi jika Anda masih gagal mereplikasi, saya akan dapat memberikan DB dump pada hari Kamis jika itu bagus?
Luke Rodgers
DB dump akan membantu, asalkan tidak super besar. Karena 1.14.1.0 adalah yang terbaru yang saya ketahui dan telah mengalami beberapa keanehan dengan aturan promo juga. Mungkin saja itu bug.
B00MER
Keren, saya akan mengambilkan itu untuk Anda dalam beberapa jam. Terima kasih.
Luke Rodgers
Periksa pembaruan posting. Itu punya tautan ke dump DB dan beberapa catatan.
Luke Rodgers

Jawaban:

7

mengambil perubahan untuk menyelami ini. Menginstal Magento Enterprise 1.14.1.0 yang bersih

Aturan Anda masih rusak tanpa yang pertama >15 rule...

Asalnya ada di subseleksi produk.

Dua fungsi ini yang menyebut dirinya berulang kali.

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

Lebih spesifik:

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

Seperti yang dapat Anda lihat, jika produk tersebut dapat dikonfigurasi (yang memang benar untuk kedua produk Anda) panggil fungsi yang diperluas lagi. Dan seterusnya, dan seterusnya, dan seterusnya, dan ...

Ini memang bug Magento karena tidak memeriksa apakah itu item yang valid yang diteruskan ke fungsi.

Biasanya fungsi ini dipanggil dengan Mage_Sales_Model_Quote_Addressdan dalam rekursi Mage_Sales_Model_Quote_Itemsehingga kita dapat membangun perbaikan untuk itu. Keduanya juga memiliki fungsi getQuote ().

Jika Anda ingin menyelesaikannya dalam kasus Anda hal itu dilakukan dengan menambahkan baris pohon ini.

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

Anda dapat menyalin file ini ke app / code / local / Mage / SalesRule / Model / Rule / Condition / Product / Subselect.php

Jadi pemeriksaan terakhir saya adalah untuk melihat apakah itu juga berlaku untuk Magento CE 1.9.1.0 Ini juga terjadi karena fungsi induk diimplementasikan dalam edisi CE. Magento CE 1.9.0.1 tidak terpengaruh, tidak memiliki fungsi induk! Jadi saya menduga Magento EE 1.13.1.0 juga bebas dari ini, karena keduanya melekat satu sama lain.

Anda harus membuat tiket di akun Magento Enterprise Anda dan memberikan informasi sehingga mereka dapat membuat tambalan untuk ini.

Jeroen
sumber
Begitu juga di Magento CE 1.9.1.0 dan yang lebih tinggi, saya sudah melewatkannya terakhir kali ... aneh ... Akan mengajukan bug di Magento's
Jeroen
2
Mengajukan bug
Jeroen