Пакет продуктов с опциями, список пожеланий > корзина = Фатальная ошибка
Я столкнулся с ошибкой, которая возникает, когда вы передаете параметры комплектного продукта в список пожеланий. Первоначальная проблема заключается не в добавлении продукта в комплекте в список желаний, это происходит, когда вы добавляете в корзину из списка желаний один из простых продуктов. Если товар отсутствует на складе между добавлением пользователем пакета в список желаний и добавлением товара в корзину, возникает фатальная ошибка:
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);
}
Этапы репликации:
- Добавьте комплектный продукт с опциями в список пожеланий.
- Удалите один из простых продуктов со склада с отключенными резервными заказами
- Добавьте товар в корзину из списка пожеланий
Результат:
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( )
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;
Вы можете сделать это, переопределив класс, или, если вы принимаете на себя некоторый риск, вы можете сделать это непосредственно в ядре, но вы должны помнить об этом при следующем обновлении (я не рекомендую это).