2

Magentoを使用していて、Mage_Catalog_Block_Product_Priceを書き直したいのですが、コミュニティcodePoolモジュールがすでにそのブロックを書き直しています。私のxmlでは、

<config>
    <global>
        <blocks>
            <WHAT_GOES_HERE?>
                <rewrite>
                    <product_price>Display_Price_Block_Product_Price</product_price>
                </rewrite>
            </WHAT_GOES_HERE?>
        </blocks>

しかし、クラスグループノード(WHAT_GOES_HEREとラベル付けしました)に何を配置する必要があるのか​​わかりません。コミュニティモジュールは<[classgroup]>宣言を行わないため、自分のノードに何を配置する必要があるのか​​わかりません。ない。

助けてくれてありがとう。

4

1 に答える 1

4

すべての構成XMLは、衝突するxpathのテキスト値がオーバーライドされることを意味する方法で単一のDOM構造にマージされます。例:

このコミュニティモジュールは現在、構成を介して解決されたクラス名を書き換えています。

<config>
    <global>
        <blocks>
            <catalog>
                <rewrite>
                    <product_price>Community_Module_Block_Example_Price</product_price>
                </rewrite>
            </catalog>
        </blocks>
    </global>
</config>

フレームワークは、を使用してブロッククラスを呼び出しますMage_Core_Model_Layout::createBlock()。この場合の引数は次のとおりですcatalog/product_price(これらの2つの文字列が構成にどのようにマップされるかに注意してください)。コミュニティモジュールは、この情報から計算されるクラス名を変更し、指定されたクラス名を指しますCommunity_Module_Block_Example_Price。次に、そのクラス名がPHPに送られnew、クラスが呼び出されます。

あなたがする必要があるのは、この正確な構成をモジュール構成にコピーすることです-あなたのブロッククラス名を指定します-そして(重要です!)以下が起こることを確認してください:

  1. コミュニティモジュールの構成に構成がロードされ、
  2. クラスがコミュニティモジュールのクラスから拡張されていること。

コミュニティモジュールの後にモジュール構成がロードされていることをどのように確認しますか?app / etc / modulesでコミュニティモジュールの宣言ファイルを開き、ノードの下のノード名<modules>(上記の例ではほぼ確実に)をメモしてCommunity_Moduleから、モジュール宣言ファイル(app / etc / modulesでも)で、これをモジュール宣言に追加します。

<depends>
    <Community_Module /> <!-- e.g. -->
</depends>

HTH

于 2012-04-27T16:11:50.020 に答える