繁体   English   中英

通过Magento中的模块覆盖Mage_Page_Block_Html_Topmenu

[英]Overwriting Mage_Page_Block_Html_Topmenu via module in Magento

我为此付出了更多的时间,而不是现在想承认的时间。

目的

创建一个模块来更改Magento的Topmenu中存在的类。

到目前为止我有什么

模块声明

app/etc/modules/Issl_Topmenu.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Issl_Topmenu>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog/>
                <Mage_Page/>
            </depends>
        </Issl_Topmenu>
    </modules>
</config>

模块配置

app/code/local/Issl/Topmenu/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Issl_Topmenu>
            <version>0.0.1</version>
        </Issl_Topmenu>
    </modules>
    <global>
        <blocks>
            <page>
                <rewrite>
                    <html_topmenu>Issl_Topmenu_Block_Page_Html_Topmenu</html_topmenu>
                </rewrite>
            </page>
        </blocks>
    </global>
</config>

app/code/local/Issl/Topmenu/Block/Page/Html/Topmenu.php

<?php
/**
 * Topmenu navigation
 *
 * Update classes on the Topmenu navigation to be more in-keeping with style guides.
 *
 * @category   ISSL
 * @package    ISSL_Topmenu
 * @author     ISSL <www.issl.co.uk>
 */

class Issl_Topmenu_Block_Page_Html_Topmenu extends Mage_Page_Block_Html_Topmenu  {
    /**/
}

结果

纳达。 它不会使页面崩溃,但也不会更改模板。 我确认该模块已在“ System->Configuration->Advanced下加载并启用,并且缓存已完全禁用。

问题显然是愚蠢的-我要去哪里错了?

要对现有基类执行简单的覆盖,只需将类复制到本地代码池内的相同路径,然后在此处进行自定义:

从:

app\code\core\Mage\Page\Block\Html\Topmenu.php

至:

app\code\local\Mage\Page\Block\Html\Topmenu.php

文件:

class Mage_Page_Block_Html_Topmenu extends Mage_Core_Block_Template
{
// code..

    public function getHtml($outermostClass = '', $childrenWrapClass = '')
    {
// my custom code

永远记得刷新缓存。

事实证明,该模块可以正常工作,但是修改Topmenu令人痛苦,而不是像以前那样简单(不再),我使用的功能已经过时,出于我的目的,创建自己的功能可能更简单模板。 非常感谢弗拉基米尔(Vladimir)帮助我深入了解了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM