在 magento 1.9.2 中创建自定义顶部菜单

Posted

技术标签:

【中文标题】在 magento 1.9.2 中创建自定义顶部菜单【英文标题】:Creating a custom top menu in magento 1.9.2 【发布时间】:2017-01-20 15:46:22 【问题描述】:

我正在尝试通过添加自定义类覆盖 app/code/core/Mage/catalog/Block/Navigation.php 。 我创建了一个新的本地扩展,其中包含以下文件

app/etc/modules/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>

app/code/local/Customnav/catalog/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>

app/code/local/Customnav/catalog/Helper/Data.php

class Customnav_Catalog_Helper_Data extends Mage_Core_Helper_Abstract 

app/code/local/Customnav/catalog/Block/Navigation.php

在这个函数 _renderCategoryMenuItemhtml 中我添加了这行代码来添加新的类,但 magento 无法识别

$classes[] = 'nav-item ';

我想在 Navigation.php 中添加额外的引导类。

我是否正确覆盖 Navigation.php?

还有其他方法可以自定义顶部菜单吗?

【问题讨论】:

【参考方案1】:

不,你没有。要正确覆盖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>

上面的 sn-p '告诉' 配置,如果(例如)调用Mage::app()-&gt;getLayout()-&gt;createBlock('catalog/navigation'),它不应该返回原始块,而是重写规则(这是你的)中所述的块。

【讨论】:

感谢@Giel Berkers 的回答。对navigation.php 的任何自定义似乎都没有效果。我试图操纵核心文件进行调试,但仍然没有发生任何变化。 Magento 1.9.2 是否使用 Navigation.php? 如果编辑核心文件没有造成任何损害,是不是你有一个不同的模块也在尝试重写Mage_Catalog_Block_Navigation?如果你把echo get_class($this) 放在你的navigation.phtml-template 文件中,它会说什么?

以上是关于在 magento 1.9.2 中创建自定义顶部菜单的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 如何在没有第三方框架的情况下在 Swift 中创建自定义动画横幅

如何在 laravel 中创建自定义关系?

如何在 QML 中创建自定义对象?

在 Wordpress 中创建自定义 URL

如何在 Facebook SDK 中创建自定义分享按钮

在 JavaScript 中创建自定义回调