Ich benutze Magento Version 1.8.1.0.
Ich versuche ein neues benutzerdefiniertes Blockmodul zu erstellen, das ich zum Erstellen einer neuen Homepage verwenden werde.
- Namensraum: Kreuzritter
- Modul: CLHomePage
- Block Type: Kreuzritterhaus
- Klasse: QWERTY (erstmal beim Testen)
- Design Package: Kreuzritter
- Thema: Standard
Das habe ich bisher:
\ 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>
Mit dem oben Gesagten wird auf meiner Homepage nur "Home Wrapper" home.phtml
angezeigt, der Inhalt von wird also angezeigt, aber nicht der Inhalt von homeads.phtml
.
Wenn ich den Blocktyp für homeads
in ändere core/template
, funktioniert das und ich sehe sowohl "Home Wrapper" als auch "Adverts". Ich weiß also, dass das Problem etwas mit dem Verweis auf meinen neuen Blocktyp (genannt Kreuzritterhaus) zu tun hat.
Was mache ich hier falsch ..?
BEARBEITEN
Nach Vorschlägen in Antworten habe ich einige Dateien wie folgt aktualisiert, aber es funktioniert immer noch nicht:
\ 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 (vereinfacht, um nur einen Block anstelle der verschachtelten Blöcke zu verwenden, die ich zuvor versucht habe)
<?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>
Ich bin also immer noch in einer Position, in der sich nichts zeigt.
Nachdem ich von @FabianBlechschmidt dazu aufgefordert wurde, habe ich die Protokolle aktiviert. Dies wird in exception.log angezeigt:
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}
Irgendwelche Ideen, was passiert .. ??
EDIT Nr. 2
@ Malachy Fand die Antwort ... Es war der Complier. Ich habe den Complier deaktiviert und es scheint jetzt zu funktionieren.
exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Antworten:
Ich finde die ganze XML-Sache schwierig, deshalb bin ich mit Ihrer Sache hier einverstanden.
Es sieht für mich so aus, als gäbe es eine Diskrepanz mit Ihrem Klassennamen und Ihrem Block-XML
dh
und
Beginnen wir mit dem Blocktyp und arbeiten rückwärts. Ich denke hier würde ich so etwas erwarten
und dieser Typ würde Magento auf die Klasse verweisen
Weiterfahrt nach Arbeit nach hinten auf diesem Tack, die Datei app \ code \ local \ Crusader \ CLHomePage \ etc \ config.xml geändert müßte so etwas wie
Es zeigt Magento auf alle Klassen, die mit 'Crusader_Home_Block_ *' beginnen. Und jetzt denke ich, dass Sie Ihr Modul Crusader_Home anstelle von Crusader_CLHomePage umbenennen und die Ordnernamen entsprechend ändern müssen ...
UND / ABER ich empfehle Ihnen dringend, Ihren Modulnamen zu ändern. Verwenden Sie immer nur einen Großbuchstaben am Anfang des Modulnamens, nicht drei, und setzen Sie auch keine Großbuchstaben in die Mitte des Namens.
Möglicherweise möchten Sie sich einige der Tools ansehen, die zum Generieren von Modulen zur Verfügung stehen. Ich finde sie sehr nützlich, um Tippfehler zu vermeiden. Ich benutze diesen Code von den sehr klugen Leuten bei MGT Commerce (er hat Einfachheit auf seiner Seite) und dieser ist alles umfassend und ein erstaunliches Stück Codierung von Silk Software .
*** BEARBEITEN Sie die folgenden Kommentare
Aufgrund des Fehlerprotokolls ist das Problem meines Erachtens, dass Magento Ihre Klassendatei nicht finden kann. Überprüfen Sie daher noch einmal, ob die Caches aktualisiert oder deaktiviert sind, insbesondere der XML-Cache, und ob der Compiler deaktiviert oder erneut aktiviert wurde .
quelle
<block type="crusaderhome/qwerty"
ist falsch. Die Lösung ist sowohl a) Korrektur des XML und b) neu kompilierenBeantworten Sie Ihre Frage an erster Stelle
sollte ersetzt werden durch
weil homeads nicht das kind von homepage ist. Ich denke das würde funktionieren.
quelle
Ich habe das gleiche Problem und löste es durch Ersetzen des folgenden Codes in config.xml
dazu
Es sollte das Problem lösen.
quelle