“잘못된 블록 유형 ..”오류를 진단하는 방법?


19

이 오류를 파악하는 방법을 모르면 일주일 동안 인터넷 검색을 해왔으며 해결책을 찾지 못하는 것 같습니다. 어떤 아이디어?

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')

addBlock, createBlock_getBlockInstance방법은 모두 첫 번째 매개 변수는 블록의 클래스 별명 문자열이 될 것으로 기대합니다. 같은 것 checkout/cart. 그러나 시스템에서이 문자열이 없습니다.

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

마 젠토는 확장 성이 뛰어 나기 때문에 여러 가지 이유가 있습니다. 가장 일반적인 이유는 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테마 폴더 에서 간단한 검색은 이 이론을 확인 (또는 무시)해야합니다.
Marius

2
마우스 오른쪽 단추로하는 reference-이 태그는 호출 스택이 발생하지 것이다 createBlock자사의 의미 호출되고, block태그를.
Alan Storm

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

그런 다음 테마 / 레이아웃의 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 ')-> __ ('잘못된 블록 유형 : % s ', $ block));'; '/app/code/core/Mage/Core/Model/Layout.php'파일의 '_getBlockInstance'함수에서

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.