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
と、出力に書き換えられたクラス名が表示されます。