Menu de navegação :page.xml não chamar a classe substituído (topmenu.php)
-
12-12-2019 - |
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 ?
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.