2012-01-09 17 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} 

私は時間のためにそれをGoogleで検索したが、いずれかの有用な情報を見つけることができません。私のMagentoのバージョンは1.5.0.1

はあなたがGoogleで検索を停止し、あなたのコードを検索を開始場合は、遠くに多くを得るでしょう

+0

誰かがエラーの可能性のある方向に私を指し示すことができれば、それはすばらしいことになります。 – MathiasH

+0

btw、localhostは少し新しいバージョン1.5.1.0を実行しています – MathiasH

+0

エラーメッセージ自体は何ですか? –

答えて

10

を助けることを願っています。

検索それを見

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

あなたの呼び出しは2番目の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に座っている場合...

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

は、文字列が自動的にucwordsを駆け抜けたが、明らかにあなたの内の任意のキャメルケースされますモデル/ブロックなどを要求するときにファイルの命名を考慮する必要があります。

+0

あなたの例ではfooを少し使っているのはそれですか? – MathiasH

+1

いいえ、パスgetは下線で展開され、ucwordsを実行しました。つまり、fは自動的に大文字に変更されます。クラスが代わりにFoo_Barと呼ばれ、Bar.phpというファイルがFooフォルダにある場合、単に 'core/foo_bar'を使用できます。 –

関連する問題