Magento neues benutzerdefiniertes Blockmodul

12

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.phtmlangezeigt, der Inhalt von wird also angezeigt, aber nicht der Inhalt von homeads.phtml.

Wenn ich den Blocktyp für homeadsin ä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.

Stephen Last
quelle
Ich nehme an, Sie haben irgendwo einen Tippfehler, überprüfen Sie Groß- / Kleinschreibung von Dateinamen. Die Dateien sehen gut aus. Haben Sie den Konfigurationscache geleert?
Fabian Blechschmidt
@FabianBlechschmidt Ich habe meine Groß- / Kleinschreibung in Code und Dateinamen überprüft - sieht für mich in Ordnung aus. Alles, was oben steht, wird aus meinen Dateien eingefügt. Im Moment ist der gesamte Cache deaktiviert, und ich habe gerade den gesamten Cache geleert und es erneut versucht. Funktioniert immer noch nicht.
Stephen Letzten
Haben Sie system.log und exception.log überprüft? Wenn nichts drin ist, würde ich mit dem Debuggen in MAge_Core_Model_Config-> getGroupedClassName () beginnen. Außerdem: Schauen Sie sich das großartige Debug-Tutorial an und berichten Sie zurück.
Fabian Blechschmidt
Ich habe die Protokolle noch nie benutzt. Ich habe sie jetzt aktiviert und exception.log zeigt:exception 'Mage_Core_Exception' with message 'Invalid block type: Crusader_Home_Block_Qwerty'
Stephen Letzter
Ich habe den Modulnamen entsprechend der anderen Antwort hier aktualisiert, daher der Name des Blocktyps (CLHomePage -> Home).
Stephen Letzten

Antworten:

11

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

class Crusader_CLHomePage_Block_Qwerty extends Mage_Core_Block_Template

und

    <block type="core/template" name="homepage" template="crusader/home.phtml">
        <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

Beginnen wir mit dem Blocktyp und arbeiten rückwärts. Ich denke hier würde ich so etwas erwarten

<block type="crusader_home/qwerty" ...

und dieser Typ würde Magento auf die Klasse verweisen

Crusader_Home_Block_Qwerty extends Mage_Core_Block_Template

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

<global>
    <blocks>
        <crusader_home>
            <class>Crusader_Home_Block</class>
        </crusader_home>
    </blocks>
</global>

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 .

Malachy
quelle
danke, ich habe deine vorschläge ausprobiert. Ich habe mein Modul in "Home" umbenannt und alle Referenzen und Ordner aktualisiert. Funktioniert immer noch nicht. Ich bearbeite meine Frage, um die Änderungen anzuzeigen.
Stephen Letzten
1
Es sieht sicherlich besser aus. Ich frage mich, ob es irgendwo noch einen Tippfehler gibt. Anhand des Fehlerprotokolls denke ich, dass Magento Ihre Klassendatei nicht finden kann. Überprüfen Sie also noch einmal, ob die Caches aktualisiert oder deaktiviert sind. XML-Cache und der Compiler ist ausgeschaltet oder wieder aktiviert. Es wäre kein Dateiberechtigungsproblem, oder?
Malachy
1
Sie erwähnten das Zauberwort - Complier ... Ich habe den Complier deaktiviert und es scheint jetzt zu funktionieren. Vielen Dank! Wenn Sie dies als Antwort hinzufügen, akzeptiere ich es für Sie! :-)
Stephen Letzten
Eigentlich war es nicht nur der Compiler. Ihre ursprüngliche XML <block type="crusaderhome/qwerty"ist falsch. Die Lösung ist sowohl a) Korrektur des XML und b) neu kompilieren
Malachy
-1

Beantworten Sie Ihre Frage an erster Stelle

    <block type="core/template" name="homepage" template="crusader/home.phtml">
       <block type="crusaderhome/qwerty" name="homeads" as="homeads" template="crusader/homeads.phtml" />
    </block>

sollte ersetzt werden durch

<block type="core/template" name="homepage" template="crusader/home.phtml"></block>
<block type="crusaderhome/qwerty" name="homeads" as="homeads" 
template="crusader/homeads.phtml" />

weil homeads nicht das kind von homepage ist. Ich denke das würde funktionieren.

Tai
quelle
Vielen Dank! Ich hatte das vorher ohne Glück versucht. Das übergeordnete / untergeordnete Element hat einwandfrei funktioniert, als der Blocktyp Core / Template war (und nicht mein benutzerdefinierter Blocktyp). Mein Problem ist also nicht die Blockplatzierung.
Stephen Letzten
-1

Ich habe das gleiche Problem und löste es durch Ersetzen des folgenden Codes in config.xml

<global>
    <blocks>
        <crusaderhome>
            <class>Crusader_CLHomePage_Block</class>
        </crusaderhome>
    </blocks>
</global>

dazu

<global>
    <blocks>
        <crusader_clhomepage>
            <class>Crusader_CLHomePage_Block</class>
        </crusader_clhomepage>
    </blocks>
</global>

Es sollte das Problem lösen.

Siddharth
quelle