2012-01-09 5 views
2

저는 개발 한 Magento 확장 기능에 큰 문제가 있습니다. 로컬 호스트 모든게 괜찮지 만 배포 할 때,이 오류가 발생합니다.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} 

나는 시간을 봤하지만 유용한 정보를 찾을 수 없습니다. 내 젠토 버전은

1.5.0.1 당신이 구글 검색을 중지하고 코드를 검색을 시작하면

+0

누군가가 가능한 오류의 방향으로 나를 가리킬 수 있으면 좋을 것입니다. – MathiasH

+0

btw, localhost가 조금 새로운 버전 1.5.1.0을 실행 중입니다. – MathiasH

+0

오류 메시지 자체가 무엇입니까? –

답변

10

당신은 더 많은 것을 얻을 것이다 도움이 될 수 있습니다 희망입니다.

addTab 방법 모두에서 그 예외를 throw 할 수있는 전체 소스 트리 만 가능한 곳을 제외하고 문자열 "잘못된 탭 설정"그에서

$ 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.')); 

봐에 대한

검색있다 당신의 표시된 스택 추적이 호출되었습니다. 문맥 안에 그 부호를보기

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의하지 아이입니다.

모듈에 tab_pricematrix이라는 이름의 탭이 레이아웃에 추가되지 않았기 때문에 getChild에 대한 호출이 false를 반환했기 때문에 내 생각 인 것 같습니다. 레이아웃 XML 파일을 새 서버에 복사 했습니까? 그 모듈을 구현했는데, 확실히 말할 수는 없습니다.

행운을 빈다.

+1

확장 기능이없는 파일을 제거하는 중이다. 사용하고이 대답은 나를 도왔다.나는
'grep -rin "tab_pricematrix"*'를 수행하고 잘못된 파일을 찾았습니다. (내 함수는 tab_pricematrix라고 불려지지 않았다.) 그리고 개발자는 사용하지 않는 패키지가 제거되었을 때 깨진 확장 의존성을 없애기 위해 커스텀 오버라이드를 작성했다. –

2

일반적으로 라이브 사이트에는 나타나지 않는 로컬 호스트 문제는 파일 시스템의 대소 문자를 구분합니다. 내 경험에있는 대부분의 개발자는 기본적으로 대/소문자를 구분하지 않는 Windows/Mac OSX에서 개발합니다. 하지만 대부분의 프로덕션 환경은 일종의 * nix 시스템입니다. 과거에 나를 트려 주었던 한 가지는 파일 이름이 중간에있는 대문자입니다. 예를 들어

블록이 FooBar.php하고 Mage_Core에 앉아 경우의 문자열 ucwords를 통해 실행 자동으로됩니다

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

사용합니다 모델 ...하지만 분명히 어떤 낙타 케이스를로드 할 때 모델명/블록 등을 요청할 때 파일 이름을 고려해야합니다.

+0

당신의 예에서 약간의 f가있는 foo가있는 오타입니까? – MathiasH

+1

아니요, 경로 get은 밑줄에서 분해되어 ucwords를 통해 실행됩니다. 즉, f가 자동으로 대문자로 변경됩니다. 클래스가 대신 Foo_Bar라고 불리며 Bar.php라는 파일이 Foo 폴더에 있으면 'core/foo_bar'를 사용할 수 있습니다. –

관련 문제