Wie kann man den Fehler "Ungültiger Blocktyp .." diagnostizieren?

19

Ich bin mir nicht sicher, wie ich diesen Fehler herausfinden soll. Ich habe eine Woche lang gegoogelt und kann anscheinend keine Lösung finden. Irgendwelche Ideen?

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}
riskywebmaster
quelle

Antworten:

20

Basierend auf dem von Ihnen geposteten Stack-Trace sieht es so aus, als ob dies passiert, wenn Magento die Layout-Update-XML-Dateien lädt und sie verwendet, um die Blöcke zu erstellen, die den HTML-Code für die Seite rendern.

Diese Zeilen scheinen das Problem zu sein

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

Die addBlock, createBlockund _getBlockInstanceMethoden erwarten , dass alle der erste Parameter eine Klasse Alias - String für den Block sein. So etwas wie checkout/cart. In Ihrem System fehlt diese Zeichenfolge jedoch.

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

Da Magento so erweiterbar ist, kann dies aus unzähligen Gründen passieren. Der häufigste Grund ist, dass Ihre catalog.xmlDatei auf diese Weise geändert wurde

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

Fehlt das typeAttribut. Das könnte so aussehen

<block name="checkout.cart">

Oder es könnte ein Tippfehler sein

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

Hoffentlich hilft das. Wenn das Problem etwas anderes ist, melden Sie die richtige Antwort.

Alan Storm
quelle
5
höchstwahrscheinlich ist sowas <block name="checkout.cart">statt <reference name="checkout.cart">. Ich habe dies in einigen Themen gesehen, die im Internet verfügbar sind (kostenlos oder kostenpflichtig). Eine einfache Suche im layoutOrdner des Themas sollte diese Theorie bestätigen (oder verwerfen).
Marius
2
Richtig, ein referenceTag würde nicht dazu führen, dass dieser Aufrufstapel createBlockaufgerufen wird, was bedeutet, dass es sich um ein blockTag handelt.
Alan Storm
3

Mit Hilfe der Kommentare aus meinem ursprünglichen Beitrag konnte ich den fehlerhaften Code aufspüren!

Hier ist das Snippet, das die Ausnahme verursacht hat:

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

Überarbeiteter Code verursacht keine Ausnahmen mehr:

<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>
riskywebmaster
quelle
0

Ich habe es geschafft, meine Probleme zu lösen, indem ich einfach die alten Blöcke entfernt habe. Ich habe das gemacht von:

Hinzufügen der Zeile Mage::log($className . ' - ' $blockName, null, 'logfile.log');zur Funktion '_generateBlock' in /app/code/core/Mage/Core/Model/Layout.php

Wie so:

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

Ich entfernte dann die Blöcke, indem ich die folgende Zeile zu meiner local.xml-Datei in meinem Thema / Layout hinzufügte

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

Hoffe das hilft jemandem. Konnte es nicht ertragen, dass der ganze Mist in meine Datei exceptions.log geschrieben wurde.

AKTUALISIEREN:

Ich habe festgestellt, dass die Verwendung dieses Codes kurz vor 'return $ this' in der _generateBlock-Funktion in /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');
}

Ändern Sie "HTTP_X_FORWARDED_FOR" offensichtlich in "REMOTE_ADDR", wenn Sie dies ebenfalls benötigen.

UPDATE 2

Am Ende stellte ich fest, dass das Problem mit meiner Website falsch war, indem ich Folgendes hinzufügte:

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

direkt über 'Mage :: throwException (Mage :: helper (' core ') -> __ (' Ungültiger Blocktyp:% s ', $ block));' in der Funktion '_getBlockInstance' in der Datei '/app/code/core/Mage/Core/Model/Layout.php'

Rupi
quelle