扩展Mage_Catalog_Block_Navigation

时间:2014-11-04 10:43:52

标签: magento

我是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检查)

2 个答案:

答案 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/

  1. 在本地文件夹中创建mymodulepack文件夹。

    Path:   C:\wamp\www\triangeli\app\code\local\mymodulepack
    
  2. 在mymodulpack命名空间内创建目录文件夹。

  3. 在Catalog文件夹中创建块等,帮助文件夹。
  4. 在块文件夹中创建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 
        }  
    }
    
  5. 在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>
    
  6. 在Helper文件夹中创建Data.php文件。

     <?php 
    class mymodulepack_Catalog_Helper_Data extends Mage_Core_Helper_Abstract
    { }
    ?>
    
  7. 要“激活”我的新模块“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>
    
  8. 从管理部门禁用缓存。