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

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 に答える