Pergunta

EDITAR :resolvido por Jonathan Hussey.Veja no final do post (ou abaixo) para o outro pergunta se você quer me ajudar sobre overridding modelo e layout :)

subsidiária da pergunta :Posso substituir page.xml, topmenu.phtml e renderizador.phtml dentro do meu módulo ou tenho que substituí-los manualmente em pastas do tema ?Se assim for, você mente, levando-me para um tutorial ou me explicar rapidamente ?Eu não consigo encontrar facilmente um tutorial que correspondem ao meu caso ...

Eu gostaria de substituir o topmenu.phtml, o processador.phtml, e o modelo de page.xml, dentro do meu módulo, e , se possível.

Obrigado por mais esta ajuda :)


Eu um novo Magento developper, então eu estou tentando fazer coisas simples, e meu entendimento do Magento é limitada...

O que eu quero fazer é exibir o menu de navegação (cima) de outra forma (painel-ish suspensa), criando meu próprio módulo.Olhei para onde o menu atual foi definido/chamada e encontrou o arquivo design/frontend/{mytheme}/default/layout/page.xml o que parece :

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

(com muitas outras coisa, mas não é o essencial)

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

Estas linhas indica precisamos de classe Mage_Page_Block_Html_Topmenu, que é exibido no arquivo de modelo design/frontend/{mytheme}/default/template/page/html/topmenu.phtml, que contém :

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

O método getHtml chega o filho do bloco catalog.topnav.renderer e fica a sua classe (Mage_Page_Block_Html_Topmenu_Renderer e chama o método de renderização com o modelo design/frontend/{mytheme}/default/template/page/html/topmenu/renderer.phtml que contém um complexo, mas trabalhando menu (Eu tentei, modificando o Mago classes e o tema arquivos phtml, e funcionou).

Mas agora, eu quero fazer isso corretamente, por overridding as classes dentro do meu módulo (que é ativo e se parece com Fqu_Supergroup).Então eu comecei com o 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 a minha classe (Fqu_Supergroup_Block_Html_Topmenu na minha módulo (local/Fqu/Supergroup/Block/Html/Topmenu.php) contém apenas o substituído métodos (_getRenderedMenuItemAttributes e _getMenuItemClasses)

Então, aqui, quando eu tento o meu código, a página exibe um partido de menu, porque não usar a minha classe (eu var_dump ed classe (get_class($this)) foi utilizado para compor o menu e voltou Mage_Page_Block_Html_Topmenu);E quando eu var_dump arquivos incluídos (get_included_files()) Eu não vejo qualquer referência ao meu módulo de todos (ele é ativado no painel de controle embora)...

Desculpem o longo post, mas obrigado por sua atenção e qualquer ajuda !

subsidiária da pergunta :Posso substituir page.xml, topmenu.phtml e renderizador.phtml dentro do meu módulo ou tenho que substituí-los manualmente em pastas do tema ?

Foi útil?

Solução

Enquanto eu ainda não analisou o seu post no detalhe, a primeira coisa que vejo ao olhar através acima é que você está declarando a sua reconfiguração incorretamente, Page em vez disso, devem ser page.Esta cadeia não coincide com o nome do módulo é.o Page no Mage_Page, ela corresponde a seqüência de caracteres usada quando declarar o recurso no módulo de reconfiguração, de modo que, neste caso, na config.xml para o Mage_Page núcleo de módulo:

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

Referência page o jogo contra o módulo de Mage_Page é determinado por inspeção da configuração global (que é, basicamente, um enorme arquivo xml contendo todos os config.xml arquivos para todos os módulos).O restante da seqüência de caracteres é determinada de acordo com o nome da classe para html_topmenu mapas para a classe Mage_Page_Block_Html_Topmenu sendo a classe de reescrever será aplicada.

Para a sua pergunta extra, sim, você pode substituir qualquer arquivo de layout ou modelo de declaração de um arquivo de layout para o seu módulo.Dentro desta você pode declarar quaisquer alterações de layout que você desejar, incluindo a alteração dos modelos de blocos e essas alterações terão prioridade sobre o núcleo de layout de arquivos como seu módulo irá sempre carregar-se depois de todos os módulos do core.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top