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):
Da ich die Funktionen dieses Moduls in zwei kleinere Teile aufteilen möchte, habe ich die Dateien MyMenu.php
im Blockordner und MyMenuController.php
in Controllern hinzugefügt .
Dann habe ich einfach den Code von Deliverydetails.php
in MyMenu.php
und DeliverydetailsController.php
in kopiert / eingefügt, um MyMenuController.php
zu 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.
quelle
Ihr Fehler besagt, dass der Block nicht gefunden werden kann
MyNamespace_CustomerDashboard_Block_Mymenu
. Gemäß diesem Hinweis sollte Ihre Blockklasse bei seinapp\code\local\MyNamespace\CustomerDashboard\Block\Mymenu.php
. Bitte beachten Sie, dass Sie habenMyMenu.php
. Es sollte seinMymenu.php
. Außerdem müssen Sie sicherstellen, dass der Klassenname lautetMyNamespace_CustomerDashboard_Block_Mymenu
.oder
Sie können diesen Fehler vermeiden, indem Sie einfach Ihr
local.xml
Update ändern . Es sollte so aussehen.Sehen Sie sich den Typ an, den wir jetzt verwenden. Es ist
customerdashboard/myMenu
stattcustomerdashboard/mymenu
. Dieser Typ bezieht sich nun auf die BlockklasseMyNamespace_CustomerDashboard_Block_MyMenu
. Auf diese Weise wird Ihr Block von Magento erkannt und das Problem behobenHinweis: Vergessen Sie nicht, den Cache zu leeren.
quelle
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:
quelle