Benutzerdefinierter Block "Ungültiger Blocktyp"

7

Ich habe einen benutzerdefinierten Block, den ich jetzt in zwei separate Blöcke aufteilen möchte.

Hier ist meine Ordnerstruktur (in app / code / local / MyNamespace / CustomerDashboard):

Geben Sie hier die Bildbeschreibung ein

Da ich die Funktionen dieses Moduls in zwei kleinere Teile aufteilen möchte, habe ich die Dateien MyMenu.phpim Blockordner und MyMenuController.phpin Controllern hinzugefügt .

Dann habe ich einfach den Code von Deliverydetails.phpin MyMenu.phpund DeliverydetailsController.phpin kopiert / eingefügt, um MyMenuController.phpzu sehen, ob er funktionieren würde.

Ich ging in meine local.xml und fügte den Verweis zu meinem Modul und seiner Vorlage hinzu:

<reference name="left">
        <block type="customerdashboard/mymenu" name="customerdashboard.mymenu" template="customer/form/my-menu.phtml"/>
    </reference>

Wenn ich auf die Seite zugreife, auf der ich den Inhalt sehen soll, befindet sich an der Stelle, an der sich das Modul befinden soll, nichts, aber ich habe das Ausnahmen.log überprüft und Folgendes gefunden:

exception 'Mage_Core_Exception' with message 'Invalid block type: MyNamespace_CustomerDashboard_Block_Mymenu' in /var/www/html/mysite/public_html/app/Mage.php:595
Stack trace:
#0 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(495): Mage::throwException('Invalid block type...')
#1 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(437): Mage_Core_Model_Layout->_getBlockInstance('customerdashboa...', Array)
#2 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(472): Mage_Core_Model_Layout->createBlock('customerdashboa...', 'customerdashboa...')
#3 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(239): Mage_Core_Model_Layout->addBlock('customerdashboa...', 'customerdashboa...')
#4 /var/www/html/mysite/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 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/Layout.php(210): Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#6 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(344): Mage_Core_Model_Layout->generateBlocks()
#7 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(269): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#8 /var/www/html/mysite/public_html/app/code/core/Mage/Customer/controllers/AccountController.php(107): Mage_Core_Controller_Varien_Action->loadLayout()
#9 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(418): Mage_Customer_AccountController->indexAction()
#10 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('index')
#11 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#12 /var/www/html/mysite/public_html/app/code/core/Mage/Core/Model/App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
#13 /var/www/html/mysite/public_html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#14 /var/www/html/mysite/public_html/index.php(93): Mage::run('', 'store')
#15 {main}

Ich habe weder meine config.xml noch irgendetwas anderes berührt, abgesehen von den beiden bereits erwähnten Dateien (und nur um Funktionen zu entfernen, die ich in diesem bestimmten Block nicht wollte), und dies ist meine config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <MyNamespace_CustomerDashboard>
                <version>0.1.1</version>
        </MyNamespace_CustomerDashboard>
    </modules>   

    <global>
        <helpers>
            <customerdashboard>
                <class>MyNamespace_CustomerDashboard_Helper</class>
            </customerdashboard>
        </helpers>
        <blocks>
            <customerdashboard>
                <class>MyNamespace_CustomerDashboard_Block</class>
            </customerdashboard>
        </blocks>
        <sales>
            <order>
                <states>
                    <invoiced translate="label">
                        <label>Invoiced</label>
                        <statuses>
                            <invoced default="1"/>
                        </statuses>
                        <visible_on_front>1</visible_on_front>
                    </invoiced>
                </states>
            </order>
        </sales>
    </global>

    <frontend>
        <routers>
            <customerdashboard>
                <use>standard</use>
                <args>
                    <module>MyNamespace_CustomerDashboard</module>
                    <frontName>customerdashboard</frontName>
                </args>
            </customerdashboard>
        </routers>  
    </frontend>     

</config>

Ich habe andere Themen zu diesem Thema hier auf StackExchange gelesen, aber keine Hinweise darauf erhalten, was das Problem sein könnte.

Also, was mache ich falsch, dass ich meinen Block nicht zum Rendern bringen kann und diesen Fehler in meinem Ausnahmen.log erhalte? Außerdem bin ich ein Magento-Neuling.

Zed_Blade
quelle

Antworten:

8

Laut Magento sollte der file/folderName danach Block,Model,Helper foldersein start with Uppercaseund nur contain one uppercase for each folder and files.

Laut magentoDateiname ist Mymenustatt MyMenu.

Klassenname sollte sein MyNamespace_CustomerDashboard_Block_Mymenu

Amit Bera
quelle
Nun, ich muss zugeben, ich wusste das nicht und dachte auch nicht, dass das wichtig wäre! Gut erkannt. Der Block ist jetzt definitiv da. Es wird zwar kein Inhalt gerendert, aber der Block ist da. (Kann dich wegen rep noch nicht hochstufen :()
Zed_Blade
Außerdem muss der Klassenname wie bei ... überprüft werden. Mymenu
Amit Bera
Ich habe das getan, als Sie die Unterschiede zwischen meinem Stil und dem Stil von Megento erwähnt haben. Sowohl auf dem Controller als auch auf dem Block. Ich überprüfe, was sonst das Problem sein könnte
Zed_Blade
Antwort Update bitte überprüfen
Amit Bera
sehr nützliche Antwort großartig :)
Suneth Kalhara
2

Ihr Fehler besagt, dass der Block nicht gefunden werden kann MyNamespace_CustomerDashboard_Block_Mymenu. Gemäß diesem Hinweis sollte Ihre Blockklasse bei sein app\code\local\MyNamespace\CustomerDashboard\Block\Mymenu.php. Bitte beachten Sie, dass Sie haben MyMenu.php. Es sollte sein Mymenu.php. Außerdem müssen Sie sicherstellen, dass der Klassenname lautet MyNamespace_CustomerDashboard_Block_Mymenu.

oder

Sie können diesen Fehler vermeiden, indem Sie einfach Ihr local.xmlUpdate ändern . Es sollte so aussehen.

<reference name="left">
    <block type="customerdashboard/myMenu" name="customerdashboard.mymenu" template="customer/form/my-menu.phtml"/>
</reference>

Sehen Sie sich den Typ an, den wir jetzt verwenden. Es ist customerdashboard/myMenustatt customerdashboard/mymenu. Dieser Typ bezieht sich nun auf die Blockklasse MyNamespace_CustomerDashboard_Block_MyMenu. Auf diese Weise wird Ihr Block von Magento erkannt und das Problem behoben

Hinweis: Vergessen Sie nicht, den Cache zu leeren.

Rajeev K Tomy
quelle
0

In einigen Fällen (Magento 1.9), wenn wir vergessen haben, die Konstruktionsfunktion in der Block-PHP-Datei zu verwenden, setzen Sie sie ein und das Problem wird behoben:

 protected function _construct()
    {
        parent::_construct();
    }
ADSingh
quelle