จะวินิจฉัยข้อผิดพลาด“ ประเภทบล็อกไม่ถูกต้อง .. ” ได้อย่างไร


19

ไม่แน่ใจว่าจะหาข้อผิดพลาดนี้ได้อย่างไรฉันใช้งาน Google เป็นเวลาหนึ่งสัปดาห์และดูเหมือนหาวิธีแก้ปัญหาไม่ได้ ความคิดใด ๆ

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');ไปยังฟังก์ชัน '_generateBlock' ใน /app/code/core/Mage/Core/Model/Layout.php

ชอบมาก

$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 ของฉัน

UPDATE:

ฉันพบว่าการใช้รหัสนี้ก่อน 'return $ this' ในฟังก์ชัน _generateBlock ใน /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');
}

เห็นได้ชัดว่าเปลี่ยน '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));' ในฟังก์ชัน '_getBlockInstance' ในไฟล์ '/app/code/core/Mage/Core/Model/Layout.php'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.