4

我必须重写核心缓存模型。这是行不通的。我第一次尝试解决这个问题是尝试用另一个模型重写......在我的 config.xml 中,我声明了以下内容

<global>         
  <models>          
    <core>
      <rewrite>
        <**layout**>MyCompany_MyModule_Model_Core_Cache</**layout**>
      </rewrite>
    </core>
  </models>
  ....

在我的课堂上,我死于构造函数。

这完美!所以我重写模型的可能性是正确的。

但是,如果我不使用 xml 中的布局节点而是使用缓存节点,这将不起作用。

所以我的尝试如下,这是行不通的:

<global>         
  <models>          
    <core>
      <rewrite>
        <cache>MyCompany_MyModule_Model_Core_Cache</cache>
      </rewrite>
    </core>
  </models>
  ....

我现在的问题:有没有办法重写/重载“缓存核心模型”???

4

3 回答 3

4

缓存将在加载模块配置 (config.xml) 之前初始化。缓存模型使用 Mage::getModel 实例化,它将模型名称缓存在注册表中。因此,以后所有尝试获取自定义缓存模型也将失败。

解决方法:把这个rewrite语句放在etc/local.xml中。这有点脏,因为 local.xml 应该只包含与模块无关的东西。但这比将核心文件复制到本地要好。

于 2012-07-05T09:55:35.130 回答
3

我有同样的问题,但我的解决方案与你的有点不同;-)

Magento 会先从 /app/etc/*.xml 加载 XML 文件(这些文件不会被缓存),然后再加载 magento 中的所有其他内容。所以我在这里创建了自己的文件“cache.xml”,内容是

<?xml version="1.0"?>
<config>
    <global>
        <models>          
            <core>
                <rewrite>
                    <cache>MyCompany_MyModule_Model_Core_Cache</cache>
                </rewrite>
            </core>
        </models>
    </global>
</config>

在 1.6、1.7 和 1.8 中完美运行

于 2013-11-12T21:21:31.573 回答
2

我也在尝试做同样的事情,我认为这是不可能的。如果你在方法中 var_dump 输出 $this->_xml->group->models: getGroupedClassName (app/code/core/Mage/Core/Model/Config.php) 你会注意到你的重写它还不可用,因此为什么它被跳过。

如果您尝试覆盖 translate 或 layout: your_class_model 您会注意到 $this->_xml... 转储了初始核心类(没有重写)并且您会看到您的重写远远超过了核心/缓存. 因此,它可能已被覆盖,但该类已被实例化、设置和使用;所以它真的不会触发任何东西。

因此,我认为不可能覆盖核心/缓存。您必须将其移动到应用程序/代码/本地。可怜。

于 2012-05-10T00:46:39.907 回答