通过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 是一种痛苦,而且不像它可能的那样简单(不再如此),我使用的功能已被弃用,出于我的目的,创建自己的模板可能更简单。非常感谢弗拉基米尔帮助我深入了解它。