Frage

BEARBEITEN :gelöst von Jonathan Hussey.Wenn Sie mir beim Überschreiben von Vorlage und Layout helfen möchten, finden Sie am Ende des Beitrags (oder unten) eine weitere Frage :)

Nebenfrage :Kann ich page.xml, topmenu.phtml und renderer.phtml in meinem Modul überschreiben oder muss ich sie manuell in den Designordnern ersetzen?Wenn ja, würde es Ihnen etwas ausmachen, mich zu einem Tutorial zu führen oder es mir kurz zu erklären?Es schien mir nicht leicht, ein Tutorial zu finden, das zu meinem Fall passt ...

Ich möchte die topmenu.phtml, die renderer.phtml und die Vorlage von page.xml überschreiben. innerhalb meines Moduls, wenn möglich.

Danke für diese weitere Hilfe :)


Ich bin ein neuer Magento-Entwickler, also versuche ich, einfache Dinge zu tun, und mein Verständnis von Magento ist begrenzt ...

Ich möchte das Navigationsmenü (oben) auf andere Weise anzeigen (Panel-Dropdown), indem ich mein eigenes Modul erstelle.Ich habe nachgesehen, wo das aktuelle Menü definiert/aufgerufen wurde, und die Datei gefunden design/frontend/{mytheme}/default/layout/page.xml was aussieht wie:

<default translate="label" module="page">
    <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
        <block type="page/html_header" name="header" as="header">
            <block type="core/text_list" name="top.menu" as="topMenu" translate="label">
                <label>Navigation Bar</label>
                <block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml">
                    <block type="page/html_topmenu_renderer" name="catalog.topnav.renderer" template="page/html/topmenu/renderer.phtml"/>
                </block>
            </block>
        </block>
    </block>
</default>

(mit vielen anderen Dingen, aber es ist das Wesentliche)

<block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml">
    <block type="page/html_topmenu_renderer" name="catalog.topnav.renderer" template="page/html/topmenu/renderer.phtml"/>
</block>

Diese Zeilen zeigen an, dass wir die Klasse benötigen Mage_Page_Block_Html_Topmenu, die in der Vorlagendatei angezeigt wird design/frontend/{mytheme}/default/template/page/html/topmenu.phtml, was beinhaltet :

<nav id="nav">
    <div class="nav-megadropdown col6">
        <?php echo $this->getHtml('level-top'); // $this is the a Topmenu object ?>
    </div>
    <div style="clear:both"></div>
</nav>

Die Methode getHtml erreicht den untergeordneten Block catalog.topnav.renderer und erhält seine Klasse (Mage_Page_Block_Html_Topmenu_Renderer und ruft die Render-Methode mit der Vorlage auf design/frontend/{mytheme}/default/template/page/html/topmenu/renderer.phtml das ein komplexes, aber funktionierendes Menü enthält (Ich habe es versucht, indem ich die Mage-Klassen und die Theme-PHTML-Dateien geändert habe, und es hat funktioniert).

Aber jetzt möchte ich es richtig machen, indem ich die Klassen in meinem Modul überschreibe (das aktiv ist und so aussieht). Fqu_Supergroup).Also habe ich mit der config.xml angefangen:

<config>
    <modules>
        <Fqu_Supergroup>
            <version>0.1.0</version>
        </Fqu_Supergroup>
    </modules>
    <global>
        <blocks>
            <Page>
                <rewrite>
                    <html_topmenu>Fqu_Supergroup_Block_Html_Topmenu</html_topmenu>
                </rewrite>
            </Page>
        </blocks>
    </global>
</config>

Und meine Klasse (Fqu_Supergroup_Block_Html_Topmenu) in meinem Modul (local/Fqu/Supergroup/Block/Html/Topmenu.php) enthält nur die überschriebenen Methoden (_getRenderedMenuItemAttributes und _getMenuItemClasses)

Wenn ich hier also meinen Code ausprobiere, zeigt die Seite ein defektes Menü an, weil meine Klasse nicht verwendet wurde (ich habe die Klasse var_dump gemacht (get_class($this)) wurde zum Rendern des Menüs verwendet und zurückgegeben Mage_Page_Block_Html_Topmenu);Und wenn ich die enthaltenen Dateien var_dumpe (get_included_files()) Ich sehe überhaupt keinen Verweis auf mein Modul (es ist jedoch im Admin-Bereich aktiviert) ...

Entschuldigung für den langen Beitrag, aber vielen Dank für Ihre Aufmerksamkeit und jede Hilfe!

Nebenfrage :Kann ich page.xml, topmenu.phtml und renderer.phtml in meinem Modul überschreiben oder muss ich sie manuell in den Designordnern ersetzen?

War es hilfreich?

Lösung

Obwohl ich Ihren Beitrag nicht im Detail analysiert habe, ist das erste, was mir beim Durchsehen des oben Gesagten auffällt, dass Sie Ihre Neufassung als falsch deklarieren. Page sollte stattdessen sein page.Diese Zeichenfolge stimmt nicht mit dem Modulnamen überein, d. h.Die Page In Mage_Page, es stimmt stattdessen mit der Zeichenfolge überein, die beim Deklarieren der Ressource in dem Modul verwendet wurde, das Sie neu schreiben, also in diesem Fall im config.xml für die Mage_Page Kern Modul:

...
<blocks>
    <page> <!-- this is the string to match -->
        <class>Mage_Page_Block</class>
    </page>
</blocks>
...

Durch Referenzierung page das Spiel gegen Modul Mage_Page wird durch die Überprüfung der globalen Konfiguration bestimmt (die im Grunde eine riesige XML-Datei ist, die alle enthält config.xml Dateien für alle Module).Der Rest der Zeichenfolge wird anhand des Klassennamens bestimmt html_topmenu Karten zur Klasse Mage_Page_Block_Html_Topmenu Dabei handelt es sich um die Klasse, auf die die Umschreibung angewendet wird.

Für Ihre zusätzliche Frage: Ja, Sie können jede Layoutdatei oder Vorlage überschreiben, indem Sie eine Layoutdatei für Ihr Modul deklarieren.Darin können Sie alle gewünschten Layoutänderungen deklarieren, einschließlich der Änderung von Vorlagen für Blöcke. Diese Änderungen haben Vorrang vor Kernlayoutdateien, da Ihr Modul immer nach allen Kernmodulen geladen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top