Blocco personalizzato "Tipo di blocco non valido"
-
13-12-2019 - |
Domanda
Ho un blocco personalizzato che ora sto cercando di entrare in due blocchi sepparati.
Ecco la mia struttura di cartelle (su app / codice / locale / mynamespace / customerboard):
Poiché voglio rompere le funzioni di questo modulo in due parti più piccole ho aggiunto i file MyMenu.php
sulla cartella di blocco e MyMenuController.php
in controller.
Allora, ho appena copiato / incollato il codice da Deliverydetails.php
in MyMenu.php
e DeliverydetailsController.php
into MyMenuController.php
StagCode solo per vedere se funzionerebbe.
Sono andato nel mio locale.xml e ha aggiunto il riferimento al mio modulo ed è il modello:
<reference name="left">
<block type="customerdashboard/mymenu" name="customerdashboard.mymenu" template="customer/form/my-menu.phtml"/>
</reference>
.
Quando accedo alla pagina in cui dovrei vedere il contenuto, non c'è nulla nel luogo in cui dovrebbe essere il modulo, ma sono andato a controllare le eccezioni.log e ho trovato questo:
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}
.
Non ho toccato il mio config.xml né nient'altro da parte dei due file che ho già menzionato (e solo per rimuovere la funzionalità non volevo in questo particolare blocco) e questo è il mio config.xml: Ho letto altri thread su questa questione qui su Stackexchange ma non ho avuto indizi per quello che potrebbe essere il problema.
Allora, cosa sto facendo male che non riesco a ottenere il mio blocco per rendere e sto ottenendo quell'errore sulle mie eccezioni. Inoltre, sono un magento newb.
Soluzione
Come in quanto Magento, il nome file/folder
dopo Block,Model,Helper folder
dovrebbe essere start with Uppercase
e solo contain one uppercase for each folder and files
.
Secondo magento
il nome del file è Mymenu
anziché MyMenu
.
Nome della classe dovrebbe essere MyNamespace_CustomerDashboard_Block_Mymenu
Altri suggerimenti
Il tuo errore dice, non può trovare il blocco MyNamespace_CustomerDashboard_Block_Mymenu
.Secondo questo suggerimento, la tua classe di blocco dovrebbe essere a app\code\local\MyNamespace\CustomerDashboard\Block\Mymenu.php
.Si prega di notare che hai MyMenu.php
.Dovrebbe essere Mymenu.php
.Inoltre è necessario assicurarsi che il nome della classe sia MyNamespace_CustomerDashboard_Block_Mymenu
.
o
È possibile evitare questo errore semplicemente modificando l'aggiornamento del local.xml
.Dovrebbe sembrare così.
<reference name="left">
<block type="customerdashboard/myMenu" name="customerdashboard.mymenu" template="customer/form/my-menu.phtml"/>
</reference>
.
Vedi il tipo ora che stiamo usando.È customerdashboard/myMenu
invece di customerdashboard/mymenu
.Ora questo tipo si riferisce alla classe Block MyNamespace_CustomerDashboard_Block_MyMenu
.In questo modo il tuo blocco sarà ricompensato da magento e il problema risolverà
Nota: non dimenticare di cancellare la cache.
In alcuni casi (Magento 1.9), se abbiamo dimenticato di utilizzare la funzione di costruzione nel file PHP Block, quindi inserirlo e il problema sarà riparato:
protected function _construct()
{
parent::_construct();
}
.