有条件地覆盖/重写magento中的类

epe*_*leg 1 php xml magento magento-1.4

我知道我可以在我的模块的config.xml中使用以下语法覆盖/重写模块中的模型类:

<config>
    <global>
        <models>
            <moduletooverride>
                <rewrite>
                    <modeltooverride>Mycompany_Mymodule_Model_Myfolder_Myclass</customer>
                </rewrite>
            </moduletooverride>
         </models>
     </global>
</config>
Run Code Online (Sandbox Code Playgroud)

但是,如果我希望这是有条件的(例如,基于我的模块adminhtml配置部分中的一些设置?)

这有什么语法吗?

或者,有没有办法让我的重写课程能够在重写之前进入课堂?(允许它称其为"前任".

Ala*_*orm 5

没有内置的配置选项,允许您有条件地重写这样的类.

但是,重写的类只是一个扩展类,因此所有标准的OOP规则都适用,包括使用parent:: 类似的东西

class My_Rewritten_Class extends Class_I_Rewrote
{

    public function theMethodIRewrote($param, $options)
    {
        $original_results = parent::theMethodIRewrote($param, $options);
        if(!Mage::getStoreConfigFlag('path/to_my/on_or_off_flag'))
        {
            return $original_results
        }

        //continue with the rewrite
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,虽然我从未尝试过,但您应该能够获得对已解析的配置选项的引用

$config->Mage::getConfig();
Run Code Online (Sandbox Code Playgroud)

然后使用其setOptions方法手动设置或取消设置重写选项.

  • 以上都是准确的陈述. (2认同)