(モデル)リライトを適切に無効にする方法


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

ノードが本当に空である限り、magentoは、ノードが決してそれらではないかのように、書き換えがなく、「クラス名を形成するためにクラスプレフィックスを使用する」と考えます。でMage_Core_Model_Config::getGroupedClassName

しかし私は、あなたが使用する必要のあることだと思います<sth/>ではなく、<sth></sth>エラーを発見していないクラスで終わる投げれる(Magentoのの目には「\ 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>

最近、他のタグ内の1つの空のタグがMagentoによって検出されずnull、警告をスローするオブジェクトの代わりに返されるという問題が発生しました。致命的ではありませんが、開発者モードで、非常に迷惑なログを記録します。

しかし、あなたの方法を証明するためのここでの確固たる証拠はエラーを引き起こしません:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.