Benutzerdefinierter Block „Ungültiger Blocktyp“
-
13-12-2019 - |
Frage
Ich habe einen benutzerdefinierten Block, den ich jetzt in zwei separate Blöcke aufteilen möchte.
Hier ist meine Ordnerstruktur (auf app/code/local/MyNamespace/CustomerDashboard):
Da ich die Funktionen dieses Moduls in zwei kleinere Teile aufteilen möchte, habe ich die Dateien hinzugefügt MyMenu.php
auf Blockordner und MyMenuController.php
in Controller umwandeln.
Dann habe ich einfach den Code kopiert/eingefügt Deliverydetails.php
hinein MyMenu.php
Und DeliverydetailsController.php
hinein MyMenuController.php
nur um zu sehen, ob es funktionieren würde.
Ich ging in meine local.xml und fügte den Verweis auf mein Modul und seine 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 sollte, ist an der Stelle, an der sich das Modul befinden sollte, nichts zu sehen, aber ich habe die Datei „Exceptions.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 außer den beiden Dateien, die ich bereits erwähnt habe, berührt (und nur, um Funktionen zu entfernen, die ich in diesem bestimmten Block nicht wollte), und das 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 hier auf StackExchange andere Threads zu diesem Thema gelesen, aber keine Hinweise darauf erhalten, wo das Problem liegen könnte.
Was mache ich also falsch, dass mein Block nicht gerendert werden kann und diese Fehlermeldung in meinem „Exceptions.log“ angezeigt wird?Außerdem bin ich ein Magento-Neuling.
Lösung
Gemäß Magento file/folder
Namen nach Block,Model,Helper folder
sollte sein start with Uppercase
und nur contain one uppercase for each folder and files
.
Entsprechend magento
Der Dateiname lautet Mymenu
anstatt MyMenu
.
Der Klassenname sollte lauten MyNamespace_CustomerDashboard_Block_Mymenu
Andere Tipps
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 dies getan 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 Ihre ändern local.xml
aktualisieren.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/myMenu
anstatt 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
Notiz : Vergessen Sie nicht, den Cache zu leeren.
Wenn wir in einigen Fällen (Magento 1.9) vergessen haben, die Konstruktfunktion in der Block-PHP-Datei zu verwenden, fügen Sie sie ein und das Problem wird behoben:
protected function _construct()
{
parent::_construct();
}