J'utilise la version 1.8.1.0 de Magento .
J'essaie de créer un nouveau module de bloc personnalisé, que j'utiliserai pour créer une nouvelle page d'accueil.
- Espace de noms: Crusader
- Module: CLHomePage
- Type de bloc: maison de croisade
- Classe: Qwerty (juste pour l'instant pendant les tests)
- Package de conception: croisé
- Thème: par défaut
Voici ce que j'ai jusqu'à présent:
\ app \ etc \ modules \ Crusader_All.xml
<?xml version="1.0"?>
<config>
<modules>
<Crusader_CLHomePage>
<active>true</active>
<codePool>local</codePool>
</Crusader_CLHomePage>
</modules>
</config>
\ app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml
<?xml version="1.0"?>
<config>
<modules>
<Crusader_CLHomePage>
<version>0.0.1</version>
</Crusader_CLHomePage>
</modules>
<global>
<blocks>
<crusaderhome>
<class>Crusader_CLHomePage_Block</class>
</crusaderhome>
</blocks>
</global>
</config>
\ app \ code \ local \ Crusader \ CLHomePage \ Block \ Qwerty.php
<?php
class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template
{
// Methods (optional)
}
?>
\ app \ design \ frontend \ crusader \ default \ layout \ local.xml
<?xml version="1.0" ?>
<layout>
<cms_index_index>
<reference name="content">
<block type="core/template" name="homepage" template="crusader/home.phtml">
<block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
</block>
</reference>
</cms_index_index>
</layout>
\ app \ design \ frontend \ crusader \ default \ template \ crusader \ home.phtml
<div id="home">
<p>Home Wrapper</p>
<?php echo $this->getChildHtml('homeads'); ?>
</div>
\ app \ design \ frontend \ crusader \ default \ template \ crusader \ homeads.phtml
<p>Adverts</p>
Maintenant, avec ce qui précède en place, ma page d'accueil affiche juste "Home Wrapper", donc le contenu de home.phtml
s'affiche, mais pas le contenu de homeads.phtml
.
Si je change le type de bloc pour homeads
en core/template
, cela fonctionne, et je vois à la fois "Home Wrapper" et "Adverts". Je sais donc que le problème est lié à la référence à mon nouveau type de bloc (appelé maison de croisade).
Qu'est-ce que je fais mal ici ..?
ÉDITER
Après des suggestions dans les réponses, j'ai mis à jour certains fichiers comme suit, mais cela ne fonctionne toujours pas:
\ app \ etc \ modules \ Crusader_Home.xml
<?xml version="1.0"?>
<config>
<modules>
<Crusader_Home>
<active>true</active>
<codePool>local</codePool>
</Crusader_Home>
</modules>
</config>
\ app \ code \ local \ Crusader \ Home \ etc \ config.xml
<?xml version="1.0"?>
<config>
<modules>
<Crusader_Home>
<version>1.0.0</version>
</Crusader_Home>
</modules>
<global>
<blocks>
<crusader_home>
<class>Crusader_Home_Block</class>
</crusader_home>
</blocks>
</global>
</config>
\ app \ code \ local \ Crusader \ Home \ Block \ Qwerty.php
<?php
class Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template
{
// Methods (optional)
}
?>
\ app \ design \ frontend \ crusader \ default \ layout \ local.xml (simplifié pour n'utiliser qu'un seul bloc au lieu des blocs imbriqués que j'essayais auparavant)
<?xml version="1.0" ?>
<layout>
<cms_index_index>
<reference name="content">
<block type="crusader_home/qwerty" name="homepage" template="crusader/home.phtml" />
</reference>
</cms_index_index>
</layout>
\ app \ design \ frontend \ crusader \ default \ template \ crusader \ home.phtml
<p>Home</p>
Je suis donc toujours dans une position où rien ne se voit.
Après avoir été invité par @FabianBlechschmidt, j'ai activé les journaux, et cela apparaît dans exception.log:
2014-04-09T14:04:54+00:00 ERR (3):
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty' in W:\stores\magento-dev\app\Mage.php:595
Stack trace:
#0 W:\stores\magento-dev\includes\src\__default.php(27744): Mage::throwException('Invalid block t...')
#1 W:\stores\magento-dev\includes\src\__default.php(27686): Mage_Core_Model_Layout->_getBlockInstance('crusader_home/q...', Array)
#2 W:\stores\magento-dev\includes\src\__default.php(27721): Mage_Core_Model_Layout->createBlock('crusader_home/q...', 'homepage')
#3 W:\stores\magento-dev\includes\src\__default.php(27488): Mage_Core_Model_Layout->addBlock('crusader_home/q...', 'homepage')
#4 W:\stores\magento-dev\includes\src\__default.php(27454): Mage_Core_Model_Layout->_generateBlock(Object(Mage_Core_Model_Layout_Element), Object(Mage_Core_Model_Layout_Element))
#5 W:\stores\magento-dev\includes\src\__default.php(27459): Mage_Core_Model_Layout->generateBlocks(Object(Mage_Core_Model_Layout_Element))
#6 W:\stores\magento-dev\includes\src\__default.php(13895): Mage_Core_Model_Layout->generateBlocks()
#7 W:\stores\magento-dev\includes\src\__default.php(11274): Mage_Core_Controller_Varien_Action->generateLayoutBlocks()
#8 W:\stores\magento-dev\includes\src\__default.php(11213): Mage_Cms_Helper_Page->_renderPage(Object(Mage_Cms_IndexController), 'home')
#9 W:\stores\magento-dev\app\code\core\Mage\Cms\controllers\IndexController.php(45): Mage_Cms_Helper_Page->renderPage(Object(Mage_Cms_IndexController), 'home')
#10 W:\stores\magento-dev\includes\src\__default.php(13969): Mage_Cms_IndexController->indexAction()
#11 W:\stores\magento-dev\includes\src\__default.php(18331): Mage_Core_Controller_Varien_Action->dispatch('index')
#12 W:\stores\magento-dev\includes\src\__default.php(17865): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#13 W:\stores\magento-dev\includes\src\__default.php(20465): Mage_Core_Controller_Varien_Front->dispatch()
#14 W:\stores\magento-dev\app\Mage.php(684): Mage_Core_Model_App->run(Array)
#15 W:\stores\magento-dev\index.php(176): Mage::run('crusadergifts', 'store')
#16 {main}
Toutes les idées ce qui se passe .. ??
EDIT No 2
@Malachy a trouvé la réponse ... C'était le compilateur. J'ai désactivé le compilateur et il semble fonctionner maintenant.
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Réponses:
Je trouve que tout le XML est difficile, donc je sympathise avec votre cause ici.
Il me semble qu'il y a une différence avec le nom de votre classe et votre bloc XML
c'est à dire
et
Commençons par le type de bloc et travaillons en arrière. Je pense qu'ici je m'attendrais à voir quelque chose comme
et ce type renvoie Magento à la classe
En continuant à travailler en arrière sur ce point, le fichier app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml devrait être modifié en quelque chose comme
Il pointe Magento vers toutes les classes commençant par 'Crusader_Home_Block_ *'. Et maintenant, je pense que vous devez renommer votre module Crusader_Home au lieu de Crusader_CLHomePage et changer les noms de dossier en conséquence ...
ET / MAIS je vous recommande fortement de changer le nom de votre module. N'utilisez qu'une seule majuscule au début du nom du module et non trois et ne mettez pas non plus de majuscules au milieu du nom.
Vous voudrez peut-être examiner certains des outils disponibles pour générer des modules. Je les trouve très utiles pour éviter les erreurs de frappe. J'utilise celui-ci par les gens très intelligents de MGT Commerce (il a de la simplicité de son côté) et celui-ci est universel et un étonnant morceau de codage par Silk Software .
*** MODIFIER suite aux commentaires ci-dessous
En outre, sur la base du journal des erreurs, je pense que le problème est que Magento ne peut pas trouver votre fichier de classe. Vérifiez donc que les caches sont actualisés ou désactivés, en particulier le cache XML, et que le compilateur est désactivé ou réactivé .
la source
<block type="crusaderhome/qwerty"
est incorrect. La solution est à la fois a) de corriger le XML et b) de recompilerrépondez à votre question en premier lieu
devrait être remplacé par
car homeads n'est pas l'enfant de la page d'accueil. Je pense que cela fonctionnerait.
la source
J'ai eu le même problème et l'ai résolu en remplaçant le code suivant dans config.xml
pour ça
Cela devrait résoudre le problème.
la source