이미 재 작성된 클래스를 재 작성하는 방법은 무엇입니까?


15

업데이트 : 나는 실제로 다시 작성해야하는 클래스가 발견 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 모듈이 다시 작성하는 catalog / 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 블록이 계속 사용되고 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변:


13

<depends>모듈의 init xml 파일에서 노드를 잘못된 위치에 넣었습니다 . 다음과 같이 모듈 이름의 노드 내에 중첩되어야합니다.

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

10

이 부분은 다음과 같습니다.

        <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-loosers/ 로드 순서가 app / etc / modules / xml 파일의 알파벳 순서를 기반으로한다는 것을 알았습니다. . 또는이 순서는 Depends 노드 (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;
    }

나는 당신의 지시를 따르지 않았고 depends 노드로도 클래스를 다시 작성할 수 없습니다.
Nick Rolando 2016 년

모듈 init xml 파일의 이름을 z.xml로 바꾸고 캐시 새로 고침을 시도하십시오.
Kristof at Fooman 2016 년

죄송합니다. 잠시 후에 다시 답변을받지 못했습니다. init xml 파일의 이름을 zzz.xml로 바꾸 었으며 다시 쓰기가 작동했습니다! <depends>노드가 작동하지 않는 이유를 알아 내야한다고 생각합니다 .
Nick Rolando

도와 줘서 고마워 +1 답변 :)
Nick Rolando

3

이것이 핵심 클래스를 다시 작성하는 것이 짜증나는 이유입니다.

여기서 엉덩이에서 촬영하지만 가장 좋은 방법은 색상 견본 구현을 확장 한 다음 색상 견본 Mage_Catalog_Blog_Product_View_Media모듈에 따라 모듈을 만드는 것입니다.

앨런 스톰 비슷한 질문에 대답 여기 .

관찰자를 통해 수행하려는 모든 작업을 시도하고 수행하는 것이 더 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.