我是Magento的新手,并且在我看来这个问题应该很简单。
我想覆盖Mage_Catalog_Block_Navigation
类,我创建了:app\code\local\Feno\Catalog\Block\Navigation.php
包含(代码段):
class Feno_Catalog_Block_Navigation extends Mage_Catalog_Block_Navigation
{
public function renderCategoriesMenuHtml($level = 0, $outermostItemClass = '', $childrenWrapClass = '', $exclude_ids = array())
{
在app\code\local\Feno\Catalog\etc\config.xml
我有:
<?xml version="1.0"?>
<config>
<modules>
<Feno_Catalog>
<version>1.0.1</version>
</Feno_Catalog>
</modules>
<global>
<blocks>
<catalog>
<rewrite>
<navigation>Feno_Catalog_Block_Navigation</navigation>
</rewrite>
</catalog>
</blocks>
</global>
</config>
然而,当我运行该页面时,我收到此错误:
Invalid method Mage_Catalog_Block_Navigation::renderCategoriesMenuHtml(Array ...
所以它甚至没有拿起我的班级。
我尝试添加app\etc\modules\Feno_Catalog.xml
:
<?xml version="1.0"?>
<config>
<modules>
<Feno_Catalog>
<active>true</active>
<codePool>local</codePool>
</Feno_Catalog>
</modules>
</config>
但这不起作用。我忘记了什么吗?
正如我所说,我是Magento的新手,所以不确定在哪里看,Google和stackoverflow都无法提供帮助。仅供参考,我使用PHPStorm,因此XML等都是有效的(IDE检查)
答案 0 :(得分:2)
您没有在config.xml文件中添加新的类名,应该是,
<?xml version="1.0"?>
<config>
<modules>
<Feno_Catalog>
<version>0.0.0</version>
</Feno_Catalog>
</modules>
<global>
<helpers>
<catalog>
<class>Feno_Catalog_Helper</class>
</catalog>
</helpers>
<blocks>
<catalog>
<class>Feno_Catalog_Block</class>
</catalog>
<catalog>
<rewrite>
<navigation>Feno_Catalog_Block_Catalog_Navigation</navigation>
</rewrite>
</catalog>
</blocks>
</global>
</config>
你在app / code / local / Feno / Catalog / Blcok / Catalog / Navigation.php上课
<?php
class Feno_Catalog_Block_Catalog_Navigation extends Mage_Catalog_Block_Navigation
{
}
你的帮助文件(可选)
应用程序/代码/本地/ FENO /目录/助手/ Data.php
<?php
class Feno_Catalog_Helper_Data extends Mage_Core_Helper_Abstract
{
}
<强>更新强>
我忘记了要添加的内容。您使用目录的模块名称已由magento core使用。因此,您需要更改模块名称或使用<depends> ..</depends>
标记。否则可能会发生模块冲突或您的模块无法加载。使用依赖,
<Mage_Catalog>
<depends>
<Packagename_Modulename />
</depends>
</Mage_Catalog>
所以你的Feno_Catalog.xml(app / etc / modules)文件应该是,
<?xml version="1.0"?>
<config>
<modules>
<Feno_Catalog>
<active>true</active>
<codePool>local</codePool>
<version>0.0.0</version>
<depends>
<Mage_Catalog />
</depends>
</Feno_Catalog>
</modules>
</config>
答案 1 :(得分:1)
我将在这里回答我自己的问题。我没有管理以前的时间并且今天再次尝试(花了我几个小时)并在搜索并尝试所有类型的东西之后找到它。
主要问题似乎是该块必须在/app/etc/local.xml中注册
...
<config>
<global>
<blocks>
<catalog>
<rewrite>
<navigation>Feno_Catalog_Block_Navigation</navigation>
</rewrite>
</catalog>
</blocks>
<install>
...
添加后,它完美无缺!
发现这篇简短而又甜蜜的博文:http://priyasmagento.blogspot.com/2010/07/override-navigation-block.html
决定添加博客文章内容,该网站似乎没有很好的维护,将丢失数据将是一种耻辱。 ©http://priyasmagento.blogspot.com/
在本地文件夹中创建mymodulepack文件夹。
Path: C:\wamp\www\triangeli\app\code\local\mymodulepack
在mymodulpack命名空间内创建目录文件夹。
在块文件夹中创建Navigation.php文件。覆盖此文件中的类和写函数。
<?php
class mymodulepack_Catalog_Block_Navigation extends Mage_Catalog_Block_Navigation
{
//write the function here,which add new functionality or override the original code
public function override()
{
//write the code here
}
}
在etc文件夹中创建config.xml文件。
<?xml version="1.0" encoding="iso-8859-1"?>
<config>
<modules>
<mymodulepack_Catalog>
<version>0.1.0</version>
</mymodulepack_Catalog>
</modules>
<global>
<blocks>
<catalog>
<rewrite>
<class>mymodulepack_Catalog_Block</class>
</rewrite>
</catalog>
</blocks>
<helpers>
<catalog>
<rewrite>
<class>mymodulepack_Catalog_Helper</class>
</rewrite>
</catalog>
</helpers>
</global>
</config>
在Helper文件夹中创建Data.php文件。
<?php
class mymodulepack_Catalog_Helper_Data extends Mage_Core_Helper_Abstract
{ }
?>
要“激活”我的新模块“mymodulepack”: 在文件app \ etc \ local.xml中引用全局范围内的mymodulepack:
<config>
<global>
<blocks>
<catalog>
<rewrite>
<navigation>mymodulepack_Catalog_Block_Navigation</navigation>
</rewrite>
</catalog>
</blocks>
<install>
<date><![CDATA[Thu, 17 Dec 2009 11:50:52 +0000]]></date>
</install>
<crypt>
<key><![CDATA[d89edae607842ce91b0e36456faed63e]]></key>
</crypt>
<disable_local_modules>false</disable_local_modules>
<resources>
<db>
<table_prefix><![CDATA[]]></table_prefix>
</db>
<default_setup>
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[root]]></username>
<password><![CDATA[]]></password>
<dbname><![CDATA[pizzaman]]></dbname>
<active>1</active>
</connection>
</default_setup>
</resources>
<session_save><![CDATA[files]]></session_save>
</global>
<admin>
<routers>
<adminhtml>
<args>
<frontName><![CDATA[admin]]></frontName>
</args>
</adminhtml>
</routers>
</admin>
</config>
从管理部门禁用缓存。