Magento上的选项卡配置错误

时间:2012-01-09 16:50:48

标签: magento-1.5 magento

我开发的magento扩展有一个很大的问题。 Localhost一切都很好,但是当我部署时,它会收到此错误。

错误的标签配置

#0 [internal function]: Mage_Adminhtml_Block_Widget_Tabs->addTab('pricematrix', 'tab_pricematrix')
#1 /var/www/vhosts/discountprint.dk/httpdocs/app/code/core/Mage/Core/Model/Layout.php(347): call_user_func_array(Array, Array)
#2 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Core/Model/Layout.php(213): Mage_Core_Model_Layout->_generateAction(Object(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
#3 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Core/Model/Layout.php(209): Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#4 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Core/Controller/Varien/Action.php(343): Mage_Core_Model_Layout->generateBlocks()
#5 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Core/Controller/Varien/Action.php(270): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#6 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Adminhtml/Controller/Action.php(263): Mage_Core_Controller_Varien_Action->loadLayout(Array, true, true)
#7 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php(246): Mage_Adminhtml_Controller_Action->loadLayout(Array)
#8 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Adminhtml_Catalog_ProductController->editAction()
#9 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(253): Mage_Core_Controller_Varien_Action->dispatch('edit')
#10 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#11 /var/www/vhosts/something.dk/httpdocs/app/code/core/Mage/Core/Model/App.php(340): Mage_Core_Controller_Varien_Front->dispatch()
#12 /var/www/vhosts/something.dk/httpdocs/app/Mage.php(627): Mage_Core_Model_App->run(Array)
#13 /var/www/vhosts/something.dk/httpdocs/index.php(80): Mage::run('', 'store')
#14 {main}

我用Google搜索了几个小时但找不到任何有用的信息。我的magento版本是1.5.0.1

希望你能帮忙

2 个答案:

答案 0 :(得分:11)

如果您停止搜索Google并开始搜索代码,您将获得更多。

搜索异常字符串“错误的标签配置”

$ ack 'Wrong tab configuration'
Adminhtml/Block/Widget/Tabs.php
108:                throw new Exception(Mage::helper('adminhtml')->__('Wrong tab configuration.'));
112:            throw new Exception(Mage::helper('adminhtml')->__('Wrong tab configuration.'));

请注意,整个源树中只有两个可能会抛出异常的位置,这两个方法都在你的堆栈跟踪指示被调用的addTab方法中。在上下文中查看该代码

public function addTab($tabId, $tab)
{
    if (is_array($tab)) {
        $this->_tabs[$tabId] = new Varien_Object($tab);
    }
    elseif ($tab instanceof Varien_Object) {
        $this->_tabs[$tabId] = $tab;
        if (!$this->_tabs[$tabId]->hasTabId()) {
            $this->_tabs[$tabId]->setTabId($tabId);
        }
    }
    elseif (is_string($tab)) {
        if (strpos($tab, '/')) {
            $this->_tabs[$tabId] = $this->getLayout()->createBlock($tab);
        }
        elseif ($this->getChild($tab)) {
            $this->_tabs[$tabId] = $this->getChild($tab);
        }
        else {
            $this->_tabs[$tabId] = null;
        }

        if (!($this->_tabs[$tabId] instanceof Mage_Adminhtml_Block_Widget_Tab_Interface)) {
            throw new Exception(Mage::helper('adminhtml')->__('Wrong tab configuration.'));
        }
    }
    else {
        throw new Exception(Mage::helper('adminhtml')->__('Wrong tab configuration.'));
    }

看起来你的电话正在通过第二个if / else分支运行。您的标签字符串tab_pricematrix用于从当前标签

中获取子块
$this->_tabs[$tabId] = $this->getChild($tab);

然而,它看起来就像在不是 Mage_Adminhtml_Block_Widget_Tab_Interface的孩子那样。

我的猜测是因为对getChild的调用返回false,因为您的模块没有向布局添加名称为tab_pricematrix的选项卡(您是否将布局XML文件复制到新的服务器?)在不知道你是如何实现该模块的情况下,我们无法确定。

祝你好运!

答案 1 :(得分:2)

通常,在实际站点上没有出现的localhost问题与文件系统区分大小写有关。根据我的经验,大多数开发人员都在Windows / Mac OSX上开发,默认情况下不区分大小写。但是大多数生产环境都是某种* nix系统。过去让我绊倒的一件事就是在中间设置一个大写字母的文件名。

例如,如果一个块是FooBar.php并且位于Mage_Core中,那么在加载模型时你必须使用...

Mage::getModel('core/fooBar');

该字符串会自动通过ucwords运行,但显然在请求模型/块等时,需要考虑文件命名中的任何骆驼外壳。