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

enter image description here

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

War es hilfreich?

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();
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top