Пакет продуктов с опциями, список пожеланий > корзина = Фатальная ошибка


Я столкнулся с ошибкой, которая возникает, когда вы передаете параметры комплектного продукта в список пожеланий. Первоначальная проблема заключается не в добавлении продукта в комплекте в список желаний, это происходит, когда вы добавляете в корзину из списка желаний один из простых продуктов. Если товар отсутствует на складе между добавлением пользователем пакета в список желаний и добавлением товара в корзину, возникает фатальная ошибка:

FATAL ERROR: CALL TO A MEMBER FUNCTION GETSELECTIONQTY() ON A NON-OBJECT IN
/APP/CODE/CORE/MAGE/BUNDLE/BLOCK/CATALOG/PRODUCT/VIEW/TYPE/BUNDLE/OPTION.PHP ON LINE 88

Magento, похоже, делает предположение, что создание объекта всегда будет успешным, что приведет к ошибке, не связанной с объектом.


Похоже, что метод Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option::_getDefaultValues предполагает, что все

/app/code/core/Mage/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php
protected function _getDefaultValues()
{
    $_option            = $this->getOption();
    $_default           = $_option->getDefaultSelection();
    $_selections        = $_option->getSelections();
    $selectedOptions    = $this->_getSelectedOptions();
    $inPreConfigured    = $this->getProduct()->hasPreconfiguredValues()
        && $this->getProduct()->getPreconfiguredValues()
                ->getData('bundle_option_qty/' . $_option->getId());

    if (empty($selectedOptions) && $_default) {
        $_defaultQty = $_default->getSelectionQty()*1;
        $_canChangeQty = $_default->getSelectionCanChangeQty();
    } elseif (!$inPreConfigured && $selectedOptions && is_numeric($selectedOptions)) {
        $selectedSelection = $_option->getSelectionById($selectedOptions);
        $_defaultQty = $selectedSelection->getSelectionQty()*1; //Line 88
        $_canChangeQty = $selectedSelection->getSelectionCanChangeQty();
    } elseif (!$this->_showSingle() || $inPreConfigured) {
        $_defaultQty = $this->_getSelectedQty();
        $_canChangeQty = (bool)$_defaultQty;
    } else {
        $_defaultQty = $_selections[0]->getSelectionQty()*1;
        $_canChangeQty = $_selections[0]->getSelectionCanChangeQty();
    }

    return array($_defaultQty, $_canChangeQty);
}

Этапы репликации:

  1. Добавьте комплектный продукт с опциями в список пожеланий.
  2. Удалите один из простых продуктов со склада с отключенными резервными заказами
  3. Добавьте товар в корзину из списка пожеланий

Результат:

FATAL ERROR: CALL TO A MEMBER FUNCTION GETSELECTIONQTY() ON A NON-OBJECT IN
/APP/CODE/CORE/MAGE/BUNDLE/BLOCK/CATALOG/PRODUCT/VIEW/TYPE/BUNDLE/OPTION.PHP ON LINE 88

Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option->_getDefaultValues()
URL: <domain>/wishlist/index/configure/id/<id>/



( ! ) FATAL ERROR: CALL TO A MEMBER FUNCTION GETSELECTIONQTY() ON A NON-OBJECT IN /APP/CODE/CORE/MAGE/BUNDLE/BLOCK/CATALOG/PRODUCT/VIEW/TYPE/BUNDLE/OPTION.PHP ON LINE 88
CALL STACK
#   TIME    MEMORY  FUNCTION    LOCATION
1   0.0000  635120  {main}( )   ../index.php:0
2   0.0022  687320  Mage::run( )    ../index.php:95
3   0.0032  959944  Mage_Core_Model_App->run( ) ../Mage.php:683
4   1.9203  5411184 Mage_Core_Controller_Varien_Front->dispatch( )  ../App.php:354
5   1.9238  5574992 Mage_Core_Controller_Varien_Router_Standard->match( )   ../Front.php:176
6   1.9262  5763440 Mage_Core_Controller_Varien_Action->dispatch( ) ../Standard.php:250
7   2.0631  9195512 Mage_Wishlist_IndexController->configureAction( )   ../Action.php:419
8   2.0737  9577736 Mage_Catalog_Helper_Product_View->prepareAndRender( )   ../IndexController.php:260
9   2.7699  22976864    Mage_Core_Controller_Varien_Action->renderLayout( ) ../View.php:147
10  2.7754  23331416    Mage_Core_Model_Layout->getOutput( )    ../Action.php:390
11  2.7754  23331496    Mage_Core_Block_Abstract->toHtml( ) ../Layout.php:555
12  2.7758  23333752    Mage_Core_Block_Template->_toHtml( )    ../Abstract.php:863
13  2.7758  23333752    Mage_Core_Block_Template->renderView( ) ../Template.php:286
14  2.7766  23334440    Mage_Core_Block_Template->fetchView( )  ../Template.php:272
15  2.7770  23377008    include( '/app/design/frontend/mytheme/default/template/page/1column.phtml' )   ../Template.php:241
16  3.1325  25998040    Mage_Core_Block_Abstract->getChildHtml( )   ../1column.phtml:36
17  3.1325  25998136    Mage_Core_Block_Abstract->_getChildHtml( )  ../Abstract.php:526
18  3.1325  25998136    Mage_Core_Block_Abstract->toHtml( ) ../Abstract.php:582
19  3.1328  25998368    Mage_Core_Block_Text_List->_toHtml( )   ../Abstract.php:863
20  3.1328  25998544    Mage_Core_Block_Abstract->toHtml( ) ../List.php:43
21  3.1331  25998776    Mage_Core_Block_Template->_toHtml( )    ../Abstract.php:863
22  3.1332  25998776    Mage_Core_Block_Template->renderView( ) ../Template.php:286
23  3.1335  25998912    Mage_Core_Block_Template->fetchView( )  ../Template.php:272
24  3.1336  26042136    include( '/app/design/frontend/mytheme/default/template/bundle/catalog/product/view.phtml' )    ../Template.php:241
25  3.2990  27927384    Mage_Core_Block_Abstract->getChildChildHtml( )  ../view.phtml:108
26  3.2990  27927560    Mage_Core_Block_Abstract->getChildHtml( )   ../Abstract.php:546
27  3.2990  27928104    Mage_Core_Block_Abstract->_getChildHtml( )  ../Abstract.php:522
28  3.2990  27928104    Mage_Core_Block_Abstract->toHtml( ) ../Abstract.php:582
29  3.2993  27928336    Mage_Core_Block_Template->_toHtml( )    ../Abstract.php:863
30  3.2993  27928336    Mage_Core_Block_Template->renderView( ) ../Template.php:286
31  3.2997  27928480    Mage_Core_Block_Template->fetchView( )  ../Template.php:272
32  3.2998  27971192    include( '/app/design/frontend/mytheme/default/template/catalog/product/view/options/wrapper.phtml' )   ../Template.php:241
33  3.2998  27971368    Mage_Core_Block_Abstract->getChildHtml( )   ../wrapper.phtml:12
34  3.2999  27972352    Mage_Core_Block_Abstract->_getChildHtml( )  ../Abstract.php:522
35  3.2999  27972352    Mage_Core_Block_Abstract->toHtml( ) ../Abstract.php:582
36  3.3002  27972584    Mage_Core_Block_Template->_toHtml( )    ../Abstract.php:863
37  3.3002  27972584    Mage_Core_Block_Template->renderView( ) ../Template.php:286
38  3.3005  27972736    Mage_Core_Block_Template->fetchView( )  ../Template.php:272
39  3.3006  28015480    include( '/app/design/frontend/mytheme/default/template/bundle/catalog/product/view/type/bundle/options.phtml' )    ../Template.php:241
40  3.3158  28030168    Mage_Bundle_Block_Catalog_Product_View_Type_Bundle->getOptionHtml( )    ../options.phtml:38
41  3.3194  28396208    Mage_Core_Block_Abstract->toHtml( ) ../Bundle.php:216
42  3.3199  28396440    Mage_Bundle_Block_Catalog_Product_Price->_toHtml( ) ../Abstract.php:863
43  3.3200  28396720    Mage_Catalog_Block_Product_Price->_toHtml( )    ../Price.php:97
44  3.3201  28396904    Mage_Core_Block_Template->_toHtml( )    ../Price.php:154
45  3.3201  28396904    Mage_Core_Block_Template->renderView( ) ../Template.php:286
46  3.3205  28397064    Mage_Core_Block_Template->fetchView( )  ../Template.php:272
47  3.3207  28439808    include( '/app/design/frontend/mytheme/default/template/bundle/catalog/product/view/type/bundle/option/select.phtml' )  ../Template.php:241
48  3.3209  28440720    Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option->_getDefaultValues( )
Author: Mufaddal, 2013-04-10

1 answers

Как сказал Дэн в комментариях, это действительно ошибка Magento.
Вот обходной путь для этого.
в Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option::_getDefaultValues измените строки 88 и 89 с

$_defaultQty = $selectedSelection->getSelectionQty()*1;
$_canChangeQty = $selectedSelection->getSelectionCanChangeQty();

К этому

$_defaultQty = ($selectedSelection) ? $selectedSelection->getSelectionQty()*1 : 0;
$_canChangeQty = ($selectedSelection)?  $selectedSelection->getSelectionCanChangeQty(): false;

Вы можете сделать это, переопределив класс, или, если вы принимаете на себя некоторый риск, вы можете сделать это непосредственно в ядре, но вы должны помнить об этом при следующем обновлении (я не рекомендую это).

 2
Author: Marius, 2013-08-26 08:57:46