produits Bundle avec des options, liste> = panier Fatal Error
-
16-10-2019 - |
Question
Je suis tombé sur un bug qui se produit lorsque vous passez des paramètres d'un produit livré dans une liste. La question initiale n'ajoute le produit livré dans la liste il se produit lorsque vous ajoutez au panier de la liste avec l'un des produits simple. Si le produit est en rupture de stock entre l'utilisateur en ajoutant le paquet à leur liste et le produit est ajouté au panier une erreur fatale est déclenchée:
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 semble faire l'hypothèse que la création d'objets est toujours va réussir résultant d'une erreur non-objet.
Il semble que la méthode Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option::_getDefaultValues
supposer que tous les
/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);
}
étapes de réplication:
- Ajouter un produit livré avec des options à la liste.
- Retirez l'un des produits simples en stock avec les commandes en souffrance pour personnes handicapées
- Ajouter l'article au panier de la liste
Résultat:
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( )
La solution
Comme Dan a dit dans les commentaires c'est en effet un bug Magento.
Voici une solution de contournement pour cela.
dans les lignes de changement de Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option::_getDefaultValues
88 et 89 à partir de
$_defaultQty = $selectedSelection->getSelectionQty()*1;
$_canChangeQty = $selectedSelection->getSelectionCanChangeQty();
à cette
$_defaultQty = ($selectedSelection) ? $selectedSelection->getSelectionQty()*1 : 0;
$_canChangeQty = ($selectedSelection)? $selectedSelection->getSelectionCanChangeQty(): false;
Vous pouvez le faire en classe ou remplaçant la si vous assumez un certain risque, vous pouvez le faire directement dans le noyau, mais vous devez vous rappeler ceci sur la prochaine mise à jour (je ne recommande pas).