我试图通过添加自定义类来覆盖app / code / core / Mage / catalog / Block / Navigation.php来尝试在magento 1.9.2中创建自定义顶级菜单。 我创建了一个新的本地扩展,其上有以下文件
应用程序的/ etc /模块/ Customnav_Catalog.xml
<?xml version="1.0"?>
<config>
<modules>
<Customnav_Catalog>
<active>true</active>
<codePool>local</codePool>
<version>0.1.0</version>
</Customnav_Catalog>
</modules>
</config>
应用程序/代码/本地/ Customnav /目录的/ etc / config.xml中
<?xml version="1.0"?>
<config>
<modules>
<Customnav_Catalog>
<version>0.1.0</version>
</Customnav_Catalog>
</modules>
<global>
<helpers>
<Customnav_Catalog>
<class>Customnav_Catalog_Helper</class>
</Customnav_Catalog>
</helpers>
<blocks>
<Customnav_Catalog>
<class>Customnav_Catalog_Block</class>
</Customnav_Catalog>
<Customnav_Catalog>
<class>Customnav_Catalog_Block</class>
<rewrite>
<navigation>Customnav_Catalog_Block_Catalog_Navigation</navigation>
</rewrite>
</Customnav_Catalog>
</blocks>
</global>
</config>
应用程序/代码/本地/ Customnav /目录/助手/ Data.php
class Customnav_Catalog_Helper_Data extends Mage_Core_Helper_Abstract {}
应用程序/代码/本地/ Customnav /目录/块/ Navigation.php
在这个函数里面_renderCategoryMenuItemHtml我添加这行代码来添加新类,但是没有通过magento识别
$classes[] = 'nav-item ';
我想在Navigation.php中添加额外的bootstrap类。
我是否正确覆盖了Navigation.php?
还有其他方法可以自定义顶层菜单吗?
答案 0 :(得分:0)
不,你没有。要正确覆盖Mage_Catalog_Block_Navigation
,您需要将重写置于特定的块配置中。所以而不是:
<blocks>
<Customnav_Catalog>
<class>Customnav_Catalog_Block</class>
</Customnav_Catalog>
<Customnav_Catalog>
<class>Customnav_Catalog_Block</class>
<rewrite>
<navigation>Customnav_Catalog_Block_Catalog_Navigation</navigation>
</rewrite>
</Customnav_Catalog>
</blocks>
你应该写:
<blocks>
<Customnav_Catalog>
<class>Customnav_Catalog_Block</class>
</Customnav_Catalog>
<catalog>
<rewrite>
<navigation>Customnav_Catalog_Block_Catalog_Navigation</navigation>
</rewrite>
</catalog>
</blocks>
上面的片段“告诉”配置如果调用Mage::app()->getLayout()->createBlock('catalog/navigation')
(例如)它不应该返回原始块,而是重写规则中指定的块(这是你的)。