Неправильная конфигурация вкладок в Magento - PullRequest
2 голосов
/ 09 января 2012

У меня огромная проблема с расширением magento, которое я разработал.С локальным хостом все в порядке, но при развертывании он получает эту ошибку.

Неправильная конфигурация вкладок

#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}

Я гуглял несколько часов, но не могу найти никакой полезной информации.Моя версия magento 1.5.0.1

Надеюсь, вы можете помочь

Ответы [ 2 ]

11 голосов
/ 09 января 2012

Вы получите намного больше, если прекратите поиск в 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-файлы Layout на новый сервер?) Не зная, как вы реализовали этот модуль, невозможно сказать наверняка.

Удачи!

2 голосов
/ 09 января 2012

Обычно проблемы локального хоста, которые не появляются на живом сайте, связаны с чувствительностью к регистру файловой системы. По моему опыту, большинство разработчиков работают на Windows / Mac OSX, которые по умолчанию не чувствительны к регистру. Но большинство производственных сред представляют собой какую-то систему * nix. Одна вещь, которая запутала меня в прошлом, - это имя файла с заглавной буквой в середине.

Например, если блок FooBar.php находится в Mage_Core, при загрузке модели вы должны использовать ...

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

Строка автоматически проходит через ucwords, но, очевидно, любой верблюжий сундук в вашем имени файла должен быть учтен при запросе модели / блока и т. Д.

...