オプション付きのバンドル製品、ウィッシュリスト>バスケット=致命的なエラー
-
16-10-2019 - |
質問
バンドルされた製品のパラメーターをウィッシュリストに渡すと発生するバグに出くわします。最初の問題は、バンドルされた製品をウィッシュリストに追加するのではなく、シンプルな製品のいずれかを使用してウィッシュリストからバスケットに追加すると発生します。ユーザーがウィッシュリストにバンドルを追加し、製品がバスケットに追加される間に製品が在庫切れになった場合、致命的なエラーがトリガーされます。
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つを削除します
- ウィッシュリストからバスケットにアイテムを追加します
結果:
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( )
解決
ダンがコメントで言ったように、これは確かにマゼントのバグです。
これがこれの回避策です。
の 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;
クラスをオーバーライドすることでこれを行うか、ある程度のリスクを想定している場合は、コアで直接それを行うことができますが、次のアップグレードでこれを覚えておく必要があります(お勧めしません)。
所属していません magento.stackexchange