(모델) 재 작성을 올바르게 비활성화하는 방법


10

특정 Magento 코어 클래스를 다시 작성하는 타사 확장이 있습니다. 블록, 도우미 또는 모델인지 여부는 중요하지 않지만이 경우 모델입니다. 이제이 다시 쓰기가 잘못되어 타사 확장을 변경하지 않고 비활성화하고 싶습니다. 따라서 타사 확장에 따라 사용자 지정 확장을 작성합니다. 타사 재 작성을 비활성화하는 가장 좋은 방법은 무엇입니까? 내가 생각할 수있는 안전한 방법은 타사 재 작성 대신 사용되는 사용자 지정 재 작성을 정의하는 것입니다.

<global>
    <models>
        <custom_extension>
            <class>Custom_Extension_Model</class>
        </custom_extension>
        <mage_core>
            <rewrite>
                <sth>Custom_Extension_Model_Sth</sth>
            </rewrite>
        </mage_core>
    </models>
</global>

Sth.php클래스는 Mage 클래스에서 직접 확장되므로 타사 재 작성을 비활성화합니다.

class Custom_Extension_Model_Sth extends Mage_Core_Model_Sth
{

}

이것은 작동하지만 기분이 좋지 않습니다. 옵저버에 대해 생각하면 config.xml을 통해서만을 비활성화하여 비활성화 할 수 있습니다 disabled. 다시 작성하면 이와 같은 것이 가능합니까? 나는 다음을 사용하려고 시도했지만 작동합니다.

<global>
    <models>
        <mage_core>
            <rewrite>
                <sth></sth>
            </rewrite>
        </mage_core>
    </models>
</global>

그러나 그렇게하는 것이 안전합니까? 모든 버전에서 작동합니까? 나는 그것을 야생에서 본 적이 없기 때문에 내가 묻는 이유입니다.

답변:


1

노드가 실제로 비어있는 한, 마 젠토는 노드가 결코 존재하지 않는 것처럼 다시 쓰지 않고 '클래스 접두어를 사용하여 클래스 이름을 형성'할 것이라고 생각합니다. 에서 Mage_Core_Model_Config::getGroupedClassName.

그러나 나는 당신이 사용해야한다는 생각 <sth/>보다는 <sth></sth>오류를 발견하지 클래스와 끝까지 던질 것이다 (마 젠토의 눈에 '\ n') 빈되지 않는에 태그를 변경 서식을 중지 할 수 있습니다.

도우미, 블록 또는 모델에 대한 '비활성화'옵션이 있다는 것을 믿지 않습니다. 옵저버를 사용할 수도 있습니다 (구성을 정확히 어떻게 해야하는지 다시 가져올 것입니다).하지만 내가 볼 수있는 문제는 모듈을 추가 한 후 다시 쓰려는 모듈을 강제로 옵저버를 사용하거나 XML을 통해 관찰자를 비활성화하는 것을 알고 있습니다.

다음과 같은 것 :

    public function controllerActionPredispatch(Varien_Event_Observer $event)
    {
        $helper = Mage::helper('webtise_foundationalerts');
        if (! $helper->isAdmin()) {
            $node = Mage::getConfig()->getNode('global/models/core/rewrite');
unset($node->sth);
        }
    }

그래서 나를 위해 XML 방식이 이깁니다.


3

이것을 막기 위해 커스텀 모듈을 만들면 덮어 쓰는 모듈에 종속되어 있는지 확인하십시오.

예기치 않은 동작을 방지하기 위해 아마도 '적절한'방식으로 다시 쓰기를 재정의 할 것입니다.

<global>
    <models>
        <mage_core>
            <rewrite>
                <sth>Mage_Core_Model_Sth</sth>
            </rewrite>
        </mage_core>
    </models>
</global>

최근에 다른 태그 내부의 빈 태그 하나가 Magento에서 감지되지 않아 null경고를 던지는 개체 대신 반환 되는 문제가 발생했습니다. 치명적이지는 않지만 개발자 모드이며 상당히 성가신 로깅입니다.

그러나 당신의 길을 증명할 확실한 증거는 없습니다 :)

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