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:

  1. Ajouter un produit livré avec des options à la liste.
  2. Retirez l'un des produits simples en stock avec les commandes en souffrance pour personnes handicapées
  3. 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( )
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top