更新: 我发现我实际上需要重写的课程是 SMDesign_SMDZoom_Block_Product_View_Media 并不是 SMDesign_ColorswatchProductView_Block_Product_View_Media 就像我最初想的那样。但是,同样的问题仍然适用。

SMDESIGN SMDZOOM扩展重写块类“目录/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> 在我的模块的启动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') 用来

一种选择是对同一块使用重写

  <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-and-looser/ 我弄清楚加载顺序基于您的应用程序/etc/模块/XML文件的字母顺序。另外,该顺序可以通过使用依赖节点(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 然后使您的模块取决于颜色色板模块。

艾伦·斯托姆(Alan Storm)回答了一个类似的问题 这里.

甚至最好是尝试通过观察者做任何您尝试做的事情。

许可以下: CC-BY-SA归因
scroll top