Question

MODIFIER :résolu par Jonathan Hussey.Voir à la fin du message (ou ci-dessous) pour une autre question si vous souhaitez m'aider à remplacer le modèle et la mise en page :)

question subsidiaire :Puis-je remplacer page.xml, topmenu.phtml et renderer.phtml dans mon module ou dois-je les remplacer manuellement dans les dossiers de thème ?Si oui, cela vous dérangerait-il de m'orienter vers un tutoriel ou de m'expliquer rapidement ?Il me semble que je n'ai pas trouvé facilement un tuto correspondant à mon cas...

Je voudrais remplacer le topmenu.phtml, le renderer.phtml et le modèle de page.xml, dans mon module, si possible.

Merci pour cette aide supplémentaire :)


Je suis un nouveau développeur Magento, j'essaie donc de faire des choses simples, et ma compréhension de Magento est limitée...

Ce que je veux faire, c'est afficher le menu de navigation (en haut) d'une autre manière (liste déroulante en forme de panneau), en créant mon propre module.J'ai regardé où le menu actuel était défini/appelé et j'ai trouvé le fichier design/frontend/{mytheme}/default/layout/page.xml ce qui ressemble à :

<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>

(avec plein d'autres choses autour, mais c'est l'essentiel)

<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>

Ces lignes indiquent que nous avons besoin de la classe Mage_Page_Block_Html_Topmenu, qui est affiché dans le fichier modèle design/frontend/{mytheme}/default/template/page/html/topmenu.phtml, qui contient :

<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>

La méthode getHtml atteint le bloc enfant catalog.topnav.renderer et obtient sa classe (Mage_Page_Block_Html_Topmenu_Renderer et appelle la méthode render avec le modèle design/frontend/{mytheme}/default/template/page/html/topmenu/renderer.phtml qui contient un menu complexe mais fonctionnel (Je l'ai essayé en modifiant les classes Mage et les fichiers phtml du thème, et cela a fonctionné).

Mais maintenant, je veux le faire correctement, en remplaçant les classes de mon module (qui est actif et ressemble à Fqu_Supergroup).J'ai donc commencé avec le config.xml :

<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>

Et ma classe (Fqu_Supergroup_Block_Html_Topmenu) dans mon module (local/Fqu/Supergroup/Block/Html/Topmenu.php) contient uniquement les méthodes remplacées (_getRenderedMenuItemAttributes et _getMenuItemClasses)

Donc ici, quand j'essaye mon code, la page affiche un menu cassé, car elle n'a pas utilisé ma classe (j'ai var_dump'ed la classe (get_class($this)) il a été utilisé pour rendre le menu et renvoyé Mage_Page_Block_Html_Topmenu);Et quand je var_dump les fichiers inclus (get_included_files()) Je ne vois aucune référence à mon module (il est cependant activé dans le panneau d'administration)...

Désolé pour le long message, mais merci pour votre attention et votre aide !

question subsidiaire :Puis-je remplacer page.xml, topmenu.phtml et renderer.phtml dans mon module ou dois-je les remplacer manuellement dans les dossiers de thème ?

Était-ce utile?

La solution

Bien que je n'aie pas analysé votre message en détail, la première chose que je remarque en parcourant ce qui précède est que vous déclarez votre réécriture de manière incorrecte, Page devrait plutôt être page.Cette chaîne ne correspond pas au nom du module, c'est-à-direle Page dans Mage_Page, il correspond à la chaîne utilisée lors de la déclaration de la ressource dans le module que vous réécrivez, donc dans ce cas dans le config.xml pour le Mage_Page module de base :

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

En référençant page le match contre le module Mage_Page est déterminé en inspectant la configuration globale (qui est essentiellement un énorme fichier XML contenant tous les config.xml fichiers pour tous les modules).Le reste de la chaîne est déterminé en fonction du nom de la classe donc html_topmenu cartes vers la classe Mage_Page_Block_Html_Topmenu étant la classe à laquelle la réécriture s’appliquera.

Pour votre question supplémentaire, oui, vous pouvez remplacer n'importe quel fichier ou modèle de mise en page en déclarant un fichier de mise en page pour votre module.À l'intérieur de celui-ci, vous pouvez déclarer toutes les modifications de mise en page que vous souhaitez, y compris la modification des modèles de blocs. Ces modifications auront la priorité sur les fichiers de mise en page de base, car votre module sera toujours chargé après tous les modules de base.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top