我已经为此绞尽脑汁了,比我现在想承认的要长。
宗旨
创建一个模块来更改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 是一种痛苦,而且不像它可能的那样简单(不再如此),我使用的功能已被弃用,出于我的目的,创建自己的模板可能更简单。非常感谢弗拉基米尔帮助我深入了解它。