0

私が正しければ、Magento では、この機能は「ナビゲーション メニュー バーに含まれるrenderCategoriesMenuHtml()カテゴリ」のメニューを表示するのに役立ちます。

renderCategoriesMenuHtml()関数を修正して「ナビゲーションメニューバーに含まれていないカテゴリ」のメニューを表示したいです。

つまり、管理パネルで属性がno"Include in navigation menu"に設定されているカテゴリのメニューを表示する必要があります。

前もって感謝します。

4

1 に答える 1

2

Magento には、クラス オーバーライドまたはクラス リライトと呼ばれる、クラスの機能を変更または追加するための機能があります。次の例では、"Custom" の名前空間と "Nav" のモジュール名を想定しています。

まず、モジュールを登録します。

<?xml version="1.0" encoding="UTF-8"?>
<!-- app/etc/modules/whatever.xml -->
<config>
    <modules>
        <Custom_Nav><!-- must match your namespace & module folder names -->
            <active>true</active>
            <codePool>local</codePool>
        </Custom_Nav>
    </modules>
</config>

上記に基づいて、アプリケーションはモジュールの構成ファイルを探します。

<?xml version="1.0" encoding="UTF-8"?>
<!-- app/code/local/Custom/Nav/etc/config.xml -->
<config>
    <global>
        <blocks>
            <catalog>
                <rewrite>
                    <navigation>Custom_Nav_Block_Rewrite_Navigation</navigation>
                </rewrite>
            </catalog>
        </blocks>
    </global>
</config>

これは、ブロック作成ファクトリ メソッドのクラス名を書き換えることです。カタログ ナビゲーション ブロックは、catalog.xmlレイアウト更新 XML ( <block type="catalog/navigation" .../>) に追加されます。上記の xpath により、クラス名がCustom_Nav_Block_Rewrite_Navigation通常の ではなくにマップされMage_Catalog_Block_Navigation、インスタンス化されるのはこのクラスです。

最後のステップは、クラス定義を作成することです。保守性のために元のクラスから拡張し、DRY に従います。

<?php
/* app/code/local/Custom/Nav/Block/Rewrite/Navigation.php */

class Custom_Nav_Block_Rewrite_Navigation extends Mage_Catalog_Block_Navigation
{
    //custom method overrides & additions belong here
}

config および block_html キャッシュをクリアすると、変更が表示されるはずです。確認するには、管理パネルからテンプレート パス ヒント + ブロック クラス名を有効にするか、サイト ルートに簡単なスクリプトを作成します。

<?php
/* test.php in Magento root folder */
ini_set('display_errors',true);

include 'app/Mage.php';
Mage::setIsDeveloperMode(true);
Mage::app();

var_dump(Mage::getConfig()->getBlockClassName('catalog/navigation'));

ブラウザーをポイントするhttp://site.com/test.phpと、出力に書き換えられたクラス名が表示されます。

于 2012-07-26T12:48:03.373 に答える