質問

アップデート: 私は実際に書き直す必要があるクラスは SMDesign_SMDZoom_Block_Product_View_Media そしてそうではありません SMDesign_ColorswatchProductView_Block_Product_View_Media 私が最初に思ったように。ただし、まったく同じ問題がまだ適用されます。

SMDESIGN SMDZOOM拡張機能は、ブロッククラスの「CATALOG/PRODUCT_VIEW_MEDIA」を書き直します。そのためのXMLは次のようになります:

       <global>
    ...         
       <blocks>
        <smdzoom>
            <class>SMDesign_SMDZoom_Block</class>
        </smdzoom>
    </blocks>
    <blocks>
        <catalog>
            <rewrite>
                <product_view_media>SMDesign_SMDZoom_Block_Product_View_Media</product_view_media>
            </rewrite>
        </catalog>
    </blocks>
           ....
       </global>

このクラスをもう一度書き直したいです。このsmdzoomモジュールが書き換えているカタログ/product_view_mediaクラスを書き直したいと思います。これはできますか?これを行うために、モジュールの構成XMLはどのように見えますか?

現在、これは私のモジュールinit xmlファイルです:

<config>
    <modules>
        <Goorin_SMDZoom>
            <active>true</active>
            <codePool>local</codePool>
        </Goorin_SMDZoom>
        <depends>
            <Mage_Catalog />
            <SMDesign_SMDZoom />
        </depends>
    </modules>
</config>

モジュールconfig.xmlファイル:

<global>
        <blocks>
            <gbismdzoom>
                <class>Goorin_SMDZoom_Block</class>
            </gbismdzoom>
            <catalog>
                <rewrite>
                    <product_view_media>Goorin_SMDZoom_Block_Product_View_Media</product_view_media>
                </rewrite>
            </catalog>
        </blocks>
    </global>

私の新しいクラスは、テストのためにこのように見えます:

class Goorin_SMDZoom_Block_Product_View_Media extends SMDesign_SMDZoom_Block_Product_View_Media
{
    public function _construct() {
        parent::_construct();
    }
}

これをテストして、テンプレートパスのヒントを表示していますが、製品ビューページでSMDesignブロックがまだ使用されていることがわかります。私は何が間違っているのですか?

役に立ちましたか?

解決

私は置きます <depends> 私のモジュールのinit xmlファイルの間違った場所のノード。モジュール名のノード内にネストする必要があります。

<config>
    <modules>
        <Goorin_SMDZoom>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog />
                <SMDesign_SMDZoom />
            </depends>
        </Goorin_SMDZoom>
    </modules>
</config>

他のヒント

ここのこの部分:

        <colorswatchproductview>
            <rewrite>
                <product_view_media>Goorin_ColorswatchProductView_Block_Product_View_Media</product_view_media>
            </rewrite>
        </colorswatchproductview>

元のインスタンス化が経由で行われた場合にのみ役立ちます createBlock('colorswatchproductview/product_view_media)
これは、最初の拡張機能が書き換えを使用しているため、どこにでも表示されたいので、これはありそうにありません。
createBlock('catalog/product_view_media') 使用されている

1つのオプションは、同じブロックの書き換えを使用することです

  <catalog>
    <rewrite>
      <product_view_media>Goorin_ColorswatchProductView_Block_Product_View_Media</product_view_media>
    </rewrite>
  </catalog>

そして、ブロッククラスで他の拡張ブロックを拡張します

class Goorin_ColorswatchProductView_Block_Product_View_Media extends SMDesign_ColorswatchProductView_Block_Product_View_Media

これを機能させるには、最初の拡張機能の後に拡張機能をロードする必要があります。ここでの私のテスト中 http://magebase.com/magento-tutorials/magento-extension-clashes-winners-dloosers/ ロード順は、アプリ/etc/modules/xmlファイルのアルファベット順に基づいていることを確認しました。あるいは、この順序は、depenss node(smdesign_colorswatchproductview)を使用することで影響を受ける可能性があります。

ブロックを単独でレンダリングしようとしているため、エラーメッセージが表示されますが、親ブロックからロードする製品が必要です。

abstract class Mage_Catalog_Block_Product_View_Abstract extends Mage_Catalog_Block_Product_Abstract
{
    /**
     * Retrive product
     *
     * @return Mage_Catalog_Model_Product
     */
    public function getProduct()
    {
        $product = parent::getProduct();
        if (is_null($product->getTypeInstance(true)->getStoreFilter($product))) {
            $product->getTypeInstance(true)->setStoreFilter(Mage::app()->getStore(), $product);
        }

        return $product;
    }

これが、コアクラスを書き直す理由です。

ここでヒップから撮影していますが、あなたの最善の策はカラースウォッチの実装を拡張することだと思います Mage_Catalog_Blog_Product_View_Media そして、モジュールをカラースウォッチモジュールに依存させます。

アラン・ストームは同様の質問に答えました ここ.

さらに良いことに、オブザーバーを通してやろうとしていることは何でもしようとすることです。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top