簡體   English   中英

Magento:無效方法Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio

[英]Magento: Invalid method Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio

打開我們的某個商品的頁面時,我看到以下錯誤。 在當前模板中,它不起作用,在另一個普通模板中。 問題可能是從magento 1.4升級到1.7。

誰能解釋這意味着什么以及發生了什么? 我怎樣才能解決這個問題?

a:5:{i:0;s:109:"Invalid method Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio::_getDefaultValues(Array ( ) )";i:1;s:7069:"#0 /www/htdocs/app/design/frontend/base/default/template/bundle/catalog/product/view/type/bundle/option/radio.phtml(33): Varien_Object->__call('_getDefaultValu...', Array)

在完整的錯誤報告下面。 該產品是捆綁產品的一部分。

a:5:{i:0;s:109:"Invalid method Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio::_getDefaultValues(Array
(
)
)";i:1;s:7069:"#0 /www/htdocs/app/design/frontend/base/default/template/bundle/catalog/product/view/type/bundle/option/radio.phtml(33): Varien_Object->__call('_getDefaultValu...', Array)

#1 /www/htdocs/app/design/frontend/base/default/template/bundle/catalog/product/view/type/bundle/option/radio.phtml(33): Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio->_getDefaultValues()
#2 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(241): include('/www/ht...')
#3 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('frontend/base/d...')
#4 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#5 /www/htdocs/app/code/core/Mage/Catalog/Block/Product/Price.php(154): Mage_Core_Block_Template->_toHtml()
#6 /www/htdocs/app/code/core/Mage/Bundle/Block/Catalog/Product/Price.php(97): Mage_Catalog_Block_Product_Price->_toHtml()
#7 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Bundle_Block_Catalog_Product_Price->_toHtml()
#8 /www/htdocs/app/code/core/Mage/Bundle/Block/Catalog/Product/View/Type/Bundle.php(216): Mage_Core_Block_Abstract->toHtml()
#9 /www/htdocs/app/design/frontend/base/default/template/bundle/catalog/product/view/type/bundle/options.phtml(37): Mage_Bundle_Block_Catalog_Product_View_Type_Bundle->getOptionHtml(Object(Mage_Bundle_Model_Option))
#10 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(241): include('/www/ht...')
#11 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('frontend/base/d...')
#12 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#13 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Template->_toHtml()
#14 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(582): Mage_Core_Block_Abstract->toHtml()
#15 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(522): Mage_Core_Block_Abstract->_getChildHtml('product.info.bu...', true)
#16 /www/htdocs/app/design/frontend/base/default/template/catalog/product/view/options/wrapper.phtml(28): Mage_Core_Block_Abstract->getChildHtml('', true, true)
#17 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(241): include('/www/ht...')
#18 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('frontend/base/d...')
#19 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#20 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Template->_toHtml()
#21 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(582): Mage_Core_Block_Abstract->toHtml()
#22 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(522): Mage_Core_Block_Abstract->_getChildHtml('product.info.op...', true)
#23 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(546): Mage_Core_Block_Abstract->getChildHtml('', true, true)
#24 /www/htdocs/app/design/frontend/default/shoestore/template/catalog/product/view.phtml(101): Mage_Core_Block_Abstract->getChildChildHtml('container2', '', true, true)
#25 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(241): include('/www/ht...')
#26 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('frontend/defaul...')
#27 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#28 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Template->_toHtml()
#29 /www/htdocs/app/code/core/Mage/Core/Block/Text/List.php(43): Mage_Core_Block_Abstract->toHtml()
#30 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Text_List->_toHtml()
#31 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(582): Mage_Core_Block_Abstract->toHtml()
#32 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(526): Mage_Core_Block_Abstract->_getChildHtml('content', true)
#32 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(526): Mage_Core_Block_Abstract->_getChildHtml('content', true)
#33 /www/htdocs/app/design/frontend/base/default/template/page/2columns-right.phtml(48): Mage_Core_Block_Abstract->getChildHtml('content')
#34 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(241): include('/www/ht...')
#35 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(272): Mage_Core_Block_Template->fetchView('frontend/base/d...')
#36 /www/htdocs/app/code/core/Mage/Core/Block/Template.php(286): Mage_Core_Block_Template->renderView()
#37 /www/htdocs/app/code/core/Mage/Core/Block/Abstract.php(863): Mage_Core_Block_Template->_toHtml()
#38 /www/htdocs/app/code/core/Mage/Core/Model/Layout.php(555): Mage_Core_Block_Abstract->toHtml()
#39 /www/htdocs/app/code/core/Mage/Core/Controller/Varien/Action.php(390): Mage_Core_Model_Layout->getOutput()
#40 /www/htdocs/app/code/core/Mage/Cms/Helper/Page.php(137): Mage_Core_Controller_Varien_Action->renderLayout()
#41 /www/htdocs/app/code/core/Mage/Cms/Helper/Page.php(52): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'no-route')
#42 /www/htdocs/app/code/core/Mage/Cms/controllers/IndexController.php(75): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'no-route')
#43 /www/htdocs/app/code/core/Mage/Core/Controller/Varien/Action.php(419): Mage_Cms_IndexController->noRouteAction()
#44 /www/htdocs/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('noRoute')
#45 /www/htdocs/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#46 /www/htdocs/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#47 /www/htdocs/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#48 /www/htdocs/index.php(119): Mage::run('', 'store')
#49 {main}";s:3:"url";s:26:"/nike-bw-black.html";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:7:"default";}

phtml文件的代碼: http ://pastebin.com/6CGq3nSR

聽起來你的系統中運行的不同版本的Magento代碼不匹配。 您也可以擁有舊類的編譯版本,或社區/本地代碼池覆蓋。 這將是很長的,所以我將嘗試用粗體文本調出特定的調試技巧

正如其他答案已經闡明的那樣,PHP正在告訴你確切的問題。

Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio :: _ getDefaultValues

Magento試圖在Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio對象上調用_getDefaultValues方法。 但是,在您的系統中,此對象沒有此方法。 如果我看一下Magento 1.7.0.1的全新安裝,這個類是在

#File: app/code/core/Mage/Bundle/Block/Catalog/Product/View/Type/Bundle/Option/Radio.php
class Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio
    extends Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option
{
    /**
     * Set template
     *
     * @return void
     */
    protected function _construct()
    {
        $this->setTemplate('bundle/catalog/product/view/type/bundle/option/radio.phtml');
    }
}

在其父類Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option ,我們可以找到_getDefaultValues的定義

#File: app/code/core/Mage/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php
class Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option extends Mage_Bundle_Block_Catalog_Product_Price
{
    protected function _getDefaultValues()
    {
        //...
    }
}    

受保護的方法可以從塊的模板中調用,因此這意味着這不是 Magento的發布版本的錯誤,而是系統的問題。

調試步驟1 :首先要檢查的是您的文件版本

app/code/core/Mage/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php

此文件是否具有_getDefaultValues方法? 如果沒有,如果它是private而不是protected ,那么問題是你的版本的phtml模板來自一個版本的Magento,但你的核心類文件是來自另一個版本,或者已被修改。 您可以嘗試下載正在運行的Magento版本的新副本並替換該文件 - 但如果這是一個拙劣的升級,您的系統可能會有其他問題,所以請准備好。 修復大於單個Stack Overflow問題。

調試步驟2 :檢查本地和社區代碼池。

Magento允許您使用app/code/communityapp/code/local code pool替換類文件。 您的系統可能具有此類池中的一個版本。 檢查文件

app/code/community/Mage/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php
app/code/local/Mage/Bundle/Block/Catalog/Product/View/Type/Bundle/Option.php

如果有文件,請檢查_getDefaultValues方法。 如果它不存在,或者它是private而不是protected ,那么你就找到了問題所在。 修復此問題將再次變得棘手。 如果文件放在此處,則表示先前的開發人員添加或更改了方法。 您可以通過刪除localcommunity文件來修復上述錯誤,但之后您將丟失此自定義功能。 您需要將正確的core文件與local / community文件合並,或者您需要識別local / community文件中的額外功能,並重構這些以使用類重寫,然后才刪除該文件。 同樣,這是一個比單個堆棧溢出答案更復雜的過程。

調試步驟3 :關閉編譯。

Magento也可能以“編譯”模式運行,並且是你的類的“編譯”版本。 關閉編譯模式

System -> Tools -> Compilation

或者從命令行開始

$ php shell/compiler.php disable

並重新編譯你的類。

調試步驟4 :清除選擇代碼緩存。

如果您正在運行像APC這樣的系統來緩存PHP opt代碼,則可能是該類的舊版本在opt代碼緩存中。 由於這里有很多選項,我將把這個緩存的清除作為讀者的練習。

調試步驟5 :使用反射來識別類文件

如果此時仍未識別出rouge類,請將以下代碼添加到index.php的底部

$o = Mage::getSingleton('core/layout')->createBlock('bundle/catalog_product_view_type_bundle_option_radio');
$r = new ReflectionClass($o);
echo '<h1>';
var_dump(get_class($o));
var_dump($r->getFilename());
echo '</h1>';

這將實例化一個塊類,並使用反射來告訴您它的定義文件在哪里。 從那里,您可以找出為什么這是錯誤的定義文件,以及您需要做什么來刪除它。

您似乎在Mage_[...]_Radio類型的對象上調用非現有方法。

Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio 沒有任何名為_getDefaultValues公共方法。


經過一些研究后,我發現該方法實際上存在於該類中,但其可見性受到保護,因此訪問它從Mage_[...]_Radio類繼承並使其可公開訪問或保護它:

class YourClass extends Mage_Bundle_Block_Catalog_Product_View_Type_Bundle_Option_Radio {
    public function getDefaultValues() { return $this->_getDefaultValues(); }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM