2012-01-09 4 views
2

У меня есть огромная проблема с расширением magento, которое я разработал. Localhost все в порядке, но когда я развертываю, он получает эту ошибку.Неверная конфигурация вкладок на 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} 

Я Googled его в течение нескольких часов, но не может найти любую полезную информацию. Моя Magento версия 1.5.0.1

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

+0

Если кто-то может просто указать мне направление возможных ошибок, было бы здорово. – MathiasH

+0

btw, localhost работает немного более новая версия 1.5.1.0 – MathiasH

+0

Что такое сообщение об ошибке? –

ответ

10

Вы получите гораздо дальше, если вы остановить поиск 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

. Я в процессе удаления файлов расширений больше не и этот ответ помог мне.Я сделал
'grep -rin 'tab_pricematrix" * 'и нашел файл-нарушитель. (моя функция не называлась tab_pricematrix) И выясняется, что разработчик написал пользовательские переопределения для разблокировки зависимостей расширения, которые были повреждены при удалении неиспользуемых пакетов. –

2

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

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

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

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

+0

Это опечатка, что у вас есть foo с маленьким f в вашем примере? – MathiasH

+1

Нет, путь get взорвался на подчеркиваниях и пробежал ucwords, что означает, что f автоматически изменится на верхний регистр. Если вместо этого класс был назван Foo_Bar и был файл Bar.php, который находился в папке Foo, вы могли бы просто использовать «core/foo_bar». –