Bagaimana cara mendiagnosis kesalahan "Jenis blok tidak valid .."?

19

Tidak yakin bagaimana mencari tahu kesalahan ini, saya sudah googling selama seminggu dan sepertinya saya tidak bisa menemukan solusi. Ada ide?

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}
guru risiko
sumber

Jawaban:

20

Berdasarkan jejak tumpukan yang Anda posting, sepertinya ini terjadi ketika Magento memuat pembaruan tata letak file xml, dan menggunakannya untuk membuat blok yang akan membuat HTML untuk halaman.

Garis-garis ini tampaknya menjadi masalah

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

Semua addBlock,, createBlockdan _getBlockInstancemetode mengharapkan parameter pertama menjadi string alias kelas untuk blok. Sesuatu seperti checkout/cart. Namun, di sistem Anda, string ini tidak ada.

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

Karena Magento sangat bisa diperpanjang, ada banyak alasan mengapa hal ini mungkin terjadi. Alasan paling umum adalah entah bagaimana catalog.xmlfile Anda telah diubah sedemikian rupa

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

Tidak ada typeatributnya. Itu mungkin terlihat seperti ini

<block name="checkout.cart">

Atau bisa juga salah ketik

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

Semoga itu bisa membantu. Jika masalahnya berakhir dengan hal lain, pastikan untuk kembali dan memposting jawaban yang benar.

Alan Storm
sumber
5
paling mungkin adalah sesuatu seperti <block name="checkout.cart">bukan <reference name="checkout.cart">. Saya telah melihat ini di beberapa tema yang ada di internet (gratis atau berbayar). Pencarian sederhana di layoutfolder tema harus mengkonfirmasi (atau mengabaikan) teori ini.
Marius
2
Benar, referencetag tidak akan menyebabkan tumpukan panggilan - createBlockdipanggil, yang artinya blocktag.
Alan Storm
3

Dengan bantuan dari komentar dari posting asli saya, saya dapat melacak kode yang menyinggung!

Berikut cuplikan yang menyebabkan pengecualian:

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

Kode revisi tidak lagi menyebabkan pengecualian:

<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>
guru risiko
sumber
0

Saya berhasil menyelesaikan masalah saya dengan hanya menghapus blok lama. Saya melakukan ini dengan:

Menambahkan baris Mage::log($className . ' - ' $blockName, null, 'logfile.log');ke fungsi '_generateBlock' di /app/code/core/Mage/Core/Model/Layout.php

Seperti itu:

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

Saya kemudian menghapus blok dengan menambahkan baris berikut ke file local.xml saya di tema / tata letak saya

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

Semoga ini bisa membantu seseorang. Tidak tahan dengan semua omong kosong yang ditulis dalam file exception.log saya.

MEMPERBARUI:

Saya telah menemukan bahwa menggunakan kode ini sebelum 'mengembalikan $ this' dalam fungsi _generateBlock di /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');
}

jelas ubah 'HTTP_X_FORWARDED_FOR' menjadi 'REMOTE_ADDR' jika Anda juga perlu.

PEMBARUAN 2

Saya akhirnya menemukan masalah dengan situs saya dengan menambahkan:

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

tepat di atas 'Mage :: throwException (Mage :: helper (' core ') -> __ (' Jenis blok tidak valid:% s ', $ blok));' dalam fungsi '_getBlockInstance' di file '/app/code/core/Mage/Core/Model/Layout.php'

rupi
sumber