「無効なブロックタイプ..」エラーを診断する方法


19

このエラーを理解する方法がわからない、私は1週間グーグルをしてきましたが、解決策を見つけることができません。何か案は?

2013-06-10T04:04:28+00:00 ERR (3): 
exception 'Mage_Core_Exception' with message 'Invalid block type: ' in /home/xxxxxxx/public_html/app/Mage.php:594
Stack trace:
#0 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/Layout.php(495): Mage::throwException('Invalid block t...')
#1 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/Layout.php(437): Mage_Core_Model_Layout->_getBlockInstance('', Array)
#2 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/Layout.php(472): Mage_Core_Model_Layout->createBlock('', 'checkout.cart')
#3 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/Layout.php(239): Mage_Core_Model_Layout->addBlock('', 'checkout.cart')
#4 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/Layout.php(205): Mage_Core_Model_Layout->_generateBlock(Object(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
#5 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/Layout.php(210): Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#6 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(344): Mage_Core_Model_Layout->generateBlocks()
#7 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(269): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#8 /home/xxxxxxx/public_html/app/code/core/Mage/Checkout/controllers/CartController.php(159): Mage_Core_Controller_Varien_Action->loadLayout()
#9 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(419): Mage_Checkout_CartController->indexAction()
#10 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('index')
#11 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#12 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#13 /home/xxxxxxx/public_html/app/Mage.php(683): Mage_Core_Model_App->run(Array)
#14 /home/xxxxxxx/public_html/index.php(89): Mage::run('', 'store')
#15 {main}

回答:


20

投稿したスタックトレースに基づいて、Magentoがレイアウト更新xmlファイルをロードし、それらを使用してページのHTMLをレンダリングするブロックを作成しているときに、これが発生しているようです。

これらの行が問題のようです

#1 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/Layout.php(437): Mage_Core_Model_Layout->_getBlockInstance('', Array)
#2 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/Layout.php(472): Mage_Core_Model_Layout->createBlock('', 'checkout.cart')
#3 /home/xxxxxxx/public_html/app/code/core/Mage/Core/Model/Layout.php(239): Mage_Core_Model_Layout->addBlock('', 'checkout.cart')

addBlockcreateBlock、および_getBlockInstance方法は、すべての最初のパラメータは、ブロックのクラスの別名文字列であることを期待しています。のようなものcheckout/cart。ただし、ご使用のシステムでは、このストリングは欠落しています。

->addBlock('', 'checkout.cart')

Magentoは非常に拡張可能であるため、これが起こる可能性のある無数の理由があります。最も一般的な理由は、何らかの方法でcatalog.xmlファイルが変更されており、

<block type="checkout/cart" name="checkout.cart">

そのtype属性がありません。それはこのように見えるかもしれません

<block name="checkout.cart">

または、タイプミスかもしれません

<block typeX="checkout/cart" name="checkout.cart">

お役に立てば幸いです。問題が最終的に別のものになる場合は、戻って正しい答えを投稿してください。


5
ほとんどの場合、のようなもの<block name="checkout.cart">です<reference name="checkout.cart">。インターネット上のいくつかのテーマ(無料または有料)でこれを見てきました。layoutテーマのフォルダ内を簡単に検索すると、この理論を確認(または却下)する必要があります。
マリウス

2
そうです、referenceタグはその呼び出しスタックを引き起こしません— createBlock呼び出されている、つまりそのblockタグを意味します。
アランストーム

3

私の元の投稿からのコメントの助けを借りて、問題のコードを追跡することができました!

例外の原因となったスニペットは次のとおりです。

<checkout_cart_index>
    <reference name="content">
        <block name="checkout.cart">            
            <!-- Add CMS Static Block -->
            <block type="cms/block" name="snippet.cart.bottom" as="snippet_cart_bottom">
                <action method="setBlockId"><block_id>snippet_cart_bottom</block_id></action>
            </block>

            <!-- Add CMS Static Block -->
            <block type="cms/block" name="snippet.cart.coupon.below" as="snippet_cart_coupon_below">
                <action method="setBlockId"><block_id>snippet_cart_coupon_below</block_id></action>
            </block>

            <!-- Add CMS Static Block -->
            <block type="cms/block" name="snippet.cart.empty.bottom" as="snippet_cart_empty_bottom">
                <action method="setBlockId"><block_id>snippet_cart_empty_bottom</block_id></action>
            </block>

            <!-- Add CMS Static Block -->
            <block type="cms/block" name="snippet.cart.list.below" as="snippet_cart_list_below">
                <action method="setBlockId"><block_id>snippet_cart_list_below</block_id></action>
            </block>
        </block>
    </reference>
</checkout_cart_index>

修正されたコードで例外が発生しなくなりました:

<checkout_cart_index>
    <reference name="checkout.cart">        
            <!-- Add CMS Static Block -->
            <block type="cms/block" name="snippet.cart.bottom" as="snippet_cart_bottom">
                <action method="setBlockId"><block_id>snippet_cart_bottom</block_id></action>
            </block>

            <!-- Add CMS Static Block -->
            <block type="cms/block" name="snippet.cart.coupon.below" as="snippet_cart_coupon_below">
                <action method="setBlockId"><block_id>snippet_cart_coupon_below</block_id></action>
            </block>

            <!-- Add CMS Static Block -->
            <block type="cms/block" name="snippet.cart.empty.bottom" as="snippet_cart_empty_bottom">
                <action method="setBlockId"><block_id>snippet_cart_empty_bottom</block_id></action>
            </block>

            <!-- Add CMS Static Block -->
            <block type="cms/block" name="snippet.cart.list.below" as="snippet_cart_list_below">
                <action method="setBlockId"><block_id>snippet_cart_list_below</block_id></action>
            </block>            
    </reference>
</checkout_cart_index>

0

ブロックを削除するだけで問題を解決できました。私はこれをしました:

Mage::log($className . ' - ' $blockName, null, 'logfile.log');/app/code/core/Mage/Core/Model/Layout.phpの「_generateBlock」関数に行を追加します

そのようです:

$block = $this->addBlock($className, $blockName);
if (!$block) {
    Mage::log($className . ' - ' $blockName, null, 'logfile.log');
    return $this;
}

次に、theme / layoutのlocal.xmlファイルに次の行を追加して、ブロックを削除しました

<remove name="fb8cd356f514800e782dfca09d40465d"/>
<remove name="1f0592cf88e12e898c194d5d18250c51"/>
<remove name="downloads.product"/>

これが誰かを助けることを願っています。exceptions.logファイルに書き込まれるがらくたをすべて我慢できませんでした。

更新:

/app/code/core/Mage/Core/Model/Layout.phpの_generateBlock関数で 'return $ this'の直前にこのコードを使用していることがわかりました

if ($_SERVER['HTTP_X_FORWARDED_FOR'] == '00.00.00.00') {
    Mage::log(Zend_Debug::dump($parentBlock, null, false), null, 'export_all_xml.log');
}

必要な場合は、明らかに「HTTP_X_FORWARDED_FOR」を「REMOTE_ADDR」に変更してください。

更新2

私は自分のサイトで問題を間違って見つけることになりました:

if ($_SERVER['HTTP_X_FORWARDED_FOR'] == '00.00.00.00') {
    Mage::setIsDeveloperMode(true);
}

'Mage :: throwException(Mage :: helper(' core ')-> __(' Invalid block type:%s '、$ block));'のすぐ上 ファイル「/app/code/core/Mage/Core/Model/Layout.php」の「_getBlockInstance」関数内

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.