Làm cách nào để chẩn đoán loại khối không hợp lệ .. Lỗi?


19

Không chắc chắn làm thế nào để tìm ra lỗi này, tôi đã làm việc trong một tuần và dường như tôi không thể tìm ra giải pháp. Có ý kiến ​​gì không?

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}

Câu trả lời:


20

Dựa trên dấu vết ngăn xếp mà bạn đã đăng, có vẻ như điều này xảy ra khi Magento đang tải các tệp xml cập nhật bố cục và sử dụng chúng để tạo các khối sẽ hiển thị HTML cho trang.

Những dòng này dường như là vấn đề

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

Tất cả addBlock, createBlock_getBlockInstancecác phương thức đều mong muốn tham số đầu tiên là một chuỗi bí danh lớp cho khối. Một cái gì đó như checkout/cart. Tuy nhiên, trong hệ thống của bạn, chuỗi này bị thiếu.

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

Bởi vì Magento rất có thể mở rộng, có vô số lý do điều này có thể xảy ra. Lý do phổ biến nhất là bằng cách nào đó catalog.xmltệp của bạn đã bị thay đổi sao cho

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

Thiếu typethuộc tính của nó . Nó có thể trông như thế này

<block name="checkout.cart">

Hoặc nó có thể là một lỗi đánh máy

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

Mong rằng sẽ giúp. Nếu vấn đề kết thúc là một cái gì đó khác, hãy chắc chắn quay lại và gửi câu trả lời chính xác.


5
có lẽ là một cái gì đó giống như <block name="checkout.cart">thay vì <reference name="checkout.cart">. Tôi đã thấy điều này trong một vài chủ đề trên internet (miễn phí hoặc trả phí). Một tìm kiếm đơn giản trong layoutthư mục của chủ đề sẽ xác nhận (hoặc loại bỏ) lý thuyết này.
Marius

2
Đúng, một referencethẻ sẽ không gây ra ngăn xếp cuộc gọi đó - createBlockđang được gọi, có nghĩa là blockthẻ đó.
Alan Storm

3

Với sự giúp đỡ từ các bình luận từ bài viết gốc của tôi, tôi đã có thể theo dõi mã vi phạm!

Đây là đoạn trích gây ra ngoại lệ:

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

Mã sửa đổi không còn gây ra ngoại lệ:

<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

Tôi quản lý để giải quyết vấn đề của mình bằng cách đơn giản là loại bỏ các khối. Tôi đã làm điều này bằng cách:

Thêm dòng Mage::log($className . ' - ' $blockName, null, 'logfile.log');vào chức năng '_generateBlock' trong /app/code/core/Mage/Core/Model/Layout.php

Thích như vậy:

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

Sau đó, tôi đã loại bỏ các khối bằng cách thêm dòng sau vào tệp local.xml của mình trong chủ đề / bố cục của tôi

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

Hy vọng điều này sẽ giúp được ai đó. Không thể chịu đựng tất cả các crap được viết trong tập tin exceptions.log của tôi.

CẬP NHẬT:

Tôi đã thấy rằng sử dụng mã này ngay trước khi 'return $ this' trong hàm _generateBlock trong /app/code/core/Mage/Core/Model/Layout.php

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

rõ ràng thay đổi 'HTTP_X_FORWARDED_FOR' thành 'REMOTE_ADDR' nếu bạn cũng cần.

CẬP NHẬT 2

Tôi đã kết thúc việc tìm ra vấn đề sai với trang web của mình bằng cách thêm:

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

ngay phía trên 'Mage :: throwException (Mage :: helper (' core ') -> __ (' Loại khối không hợp lệ:% s ', $ block));' trong hàm '_getBlockInstance' trong tệp '/app/code/core/Mage/Core/Model/Layout.php'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.