Comment diagnostiquer l'erreur "Type de bloc non valide .."?


19

Je ne sais pas comment comprendre cette erreur, je google depuis une semaine et je n'arrive pas à trouver de solution. Des idées?

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}

Réponses:


20

Sur la base de la trace de pile que vous avez publiée, il semble que cela se produit lorsque Magento charge les fichiers xml de mise à jour de la mise en page et les utilise pour créer les blocs qui rendront le code HTML de la page.

Ces lignes semblent être le problème

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

Les addBlock, createBlocket les _getBlockInstanceméthodes attendent tout le premier paramètre à une chaîne d'alias de classe pour le bloc. Quelque chose comme checkout/cart. Cependant, dans votre système, cette chaîne est manquante.

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

Parce que Magento est tellement extensible, il y a une myriade de raisons pour que cela se produise. La raison la plus courante est que votre catalog.xmlfichier a été modifié de telle sorte que ce

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

Il manque son typeattribut. Cela pourrait ressembler à ceci

<block name="checkout.cart">

Ou ce pourrait être une faute de frappe

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

J'espère que cela pourra aider. Si le problème finit par être autre chose, assurez-vous de revenir et de poster la bonne réponse.


5
est très probablement quelque chose comme <block name="checkout.cart">au lieu de <reference name="checkout.cart">. J'ai vu cela dans quelques thèmes qui sont sur Internet (gratuits ou payants). Une simple recherche dans le layoutdossier du thème devrait confirmer (ou écarter) cette théorie.
Marius

2
À droite, une referencebalise ne provoquerait pas cette pile d'appels - createBlockest appelée, ce qui signifie que c'est une blockbalise.
Alan Storm

3

Avec l'aide des commentaires de mon message d'origine, j'ai pu retrouver le code incriminé!

Voici l'extrait de code à l'origine de l'exception:

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

Le code révisé ne provoque plus d'exceptions:

<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

J'ai réussi à résoudre mes problèmes en supprimant simplement les blocs. Je l'ai fait par:

Ajout de la ligne Mage::log($className . ' - ' $blockName, null, 'logfile.log');à la fonction '_generateBlock' dans /app/code/core/Mage/Core/Model/Layout.php

Ainsi:

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

J'ai ensuite supprimé les blocs en ajoutant la ligne suivante à mon fichier local.xml dans mon thème / ma disposition

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

J'espère que cela aide quelqu'un. Impossible de supporter toutes les conneries écrites dans mon fichier exceptions.log.

MISE À JOUR:

J'ai trouvé que l'utilisation de ce code juste avant 'return $ this' dans la fonction _generateBlock dans /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');
}

changez évidemment 'HTTP_X_FORWARDED_FOR' en 'REMOTE_ADDR' si vous en avez besoin aussi.

MISE À JOUR 2

J'ai fini par trouver le problème avec mon site en ajoutant:

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

juste au-dessus de 'Mage :: throwException (Mage :: helper (' core ') -> __ (' Type de bloc non valide:% s ', $ block));' dans la fonction '_getBlockInstance' du fichier '/app/code/core/Mage/Core/Model/Layout.php'

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.