Domanda

MODIFICA :risolto da Jonathan Hussey.Vedi alla fine del post (o al di sotto) per un'altra domanda, se volete darmi una mano su overridding template e layout :)

filiale di domanda :Posso ignorare page.xml, topmenu.phtml e renderer.phtml nel mio modulo o devo sostituire manualmente in tema di cartelle ?Se è così, è la mente che mi sta portando a un tutorial o spiegarmi velocemente ?Non mi sembra di trovare facilmente un tutorial che abbinare il mio caso ...

Vorrei sovrascrivere il topmenu.phtml, il motore di rendering.phtml, e il modello di page.xml, nel mio modulo, se possibile.

Grazie per questo ulteriore aiuto :)


Ho un nuovo Magento developper, così sto cercando di fare le cose semplici, e la mia conoscenza di Magento è limitata...

Quello che voglio fare è visualizzare il menu di navigazione (in alto) un altro modo (pannello-ish discesa), creando il mio modulo.Ho guardato dove il menu è stato definito/chiamato e trovato il file design/frontend/{mytheme}/default/layout/page.xml che si presenta come :

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

(con molte altre cose, ma è l'essenziale)

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

Queste linee indica che abbiamo bisogno di una classe Mage_Page_Block_Html_Topmenu, che viene visualizzato nel file di modello design/frontend/{mytheme}/default/template/page/html/topmenu.phtml, che contiene :

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

Il metodo getHtml raggiunge il bambino blocco catalog.topnav.renderer e ottiene la sua classe (Mage_Page_Block_Html_Topmenu_Renderer e chiama il metodo render con il modello design/frontend/{mytheme}/default/template/page/html/topmenu/renderer.phtml che contiene un complesso ma lavorando menu (L'ho provato da modifiying le classi di maghi, e il tema phtml file, e ha funzionato).

Ma ora, voglio fare bene, da overridding le classi all'interno del mio modulo (che è attivo e si presenta come Fqu_Supergroup).Così ho cominciato con la 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>

E la mia classe (Fqu_Supergroup_Block_Html_Topmenu nel mio modulo (local/Fqu/Supergroup/Block/Html/Topmenu.php) contiene solo viene sottoposto a override dei metodi (_getRenderedMenuItemAttributes e _getMenuItemClasses)

Così qui, quando cerco di fare del mio codice, la pagina visualizza un rotto del menu, perché non usare la mia classe (I var_dump sotto la classe (get_class($this)) è stato utilizzato per rendere il menu e restituito Mage_Page_Block_Html_Topmenu);E quando ho var_dump il file inclusi: (get_included_files()) Non vedo nessun riferimento al mio modulo (è attivato nel pannello di amministrazione, però)...

Scusate per il lungo post, ma grazie per la vostra attenzione e per qualsiasi aiuto !

filiale di domanda :Posso ignorare page.xml, topmenu.phtml e renderer.phtml nel mio modulo o devo sostituire manualmente in tema di cartelle ?

È stato utile?

Soluzione

Mentre non ho analizzato il tuo post nel dettaglio, la prima cosa che ho posto quando si cerca attraverso cui sopra si dichiara il suo riscrivere in modo non corretto, Page dovrebbe, invece, essere page.Questa stringa non corrisponde il nome del modulo, cioèil Page in Mage_Page, è, invece, corrisponde alla stringa utilizzato quando si dichiara la risorsa nel modulo di riscrittura, quindi in questo caso nel config.xml per il Mage_Page modulo di base:

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

Facendo riferimento page la partita contro il modulo Mage_Page è determinata analizzando la configurazione globale (che è fondamentalmente una massiccia file xml contenente tutte le config.xml file per tutti i moduli).Il resto della stringa è determinato in base al nome della classe in modo html_topmenu mappe per classe Mage_Page_Block_Html_Topmenu essendo la classe a riscrivere applicare.

Per la tua ulteriore domanda, sì, è possibile sovrascrivere qualsiasi file di layout o di un modello dichiarando un file di layout per il vostro modulo.All'interno di questa si può dichiarare eventuali modifiche di layout che si desidera tra cui il cambiamento dei modelli per blocchi e questi cambiamenti avranno la priorità su core file di layout del modulo sarà sempre carico dopo tutti i moduli di base.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top