7

我正在使用以下 xml 扩展 app/code/core/Mage/Page/Block/Html/Topmenu.php:

<config>
    <modules>
        <Custom_Menu>
            <version>1.0</version>
        </Custom_Menu>
    </modules>
    <global>
        <blocks>
            <page>
                <rewrite>
                    <html_topmenu>Custom_Menu_Block_Page_Html_Topmenu</html_topmenu>
                </rewrite>
            </page>
        </blocks>
    </global>
</config>

我的班级定义:

class Custom_Menu_Block_Page_Html_Topmenu extends Mage_Page_Block_Html_Topmenu
{

}

即使我的类没有覆盖任何方法,也不会处理以下模板文件:

app/design/frontend/base/default/template/page/html/topmenu.phtml

我没有覆盖模板文件。

一旦我禁用我的模块,它就会再次开始工作。

我需要在我的 xml 文件中声明其他任何内容吗?

4

2 回答 2

4

在您的 config.xml 文件中进行此更改

<html_topmenu>Custom_Menu_Block_Html_Topmenu</html_topmenu>

并将您的班级名称更改为

class Custom_Menu_Block_Html_Topmenu extends Mage_Page_Block_Html_Topmenu
{

}
于 2012-12-11T09:03:11.633 回答
1

一件事浮现在脑海。您可能将类文件放在错误的位置。您的重写代码看起来是正确的,因此当 Magento 实例化一个page/html_topmenu块时,它会正确地将其解析为您的Custom_Menu_Block_Page_Html_Topmenu类名。但是,Magento 可能无法找到该类Custom_Menu_Block_Page_Html_Topmenu。尝试运行代码

$block = new Custom_Menu_Block_Page_Html_Topmenu;
var_dump($block);

从一个空的控制器和/或引导文件中确保 Magento 可以找到你的类。跑步也无妨

$block = Mage::getSingleton('core/layout')->createBlock('page/html_topmenu');
var_dump($block);

确保您的重写正在做它需要做的事情。

于 2012-09-19T17:04:53.763 回答