被覆盖的模型实体没有执行


Overridden Model Entities not Executing

我试图覆盖客户的地址和客户的模型实体。它在我的开发环境中工作,但我不能让它在生产环境中运行。它们都使用Magento 1.6.0.0。

有两个地方我可能搞错了:

  1. 有可能我没有上传所有需要的文件,但不知道我错过了什么。我已经尝试过FTP整个模块目录,所以如果有额外的文件,他们必须从代码的另一部分。
  2. 数据库中缺少数据/数据不正确。这似乎更有可能,但我不确定在哪里看(我直接通过PhpMyAdmin设置数据,而不是使用Magento设置文件,这是一个自定义的Magento项目,所以不需要在其他地方复制/复制这个在未来。)

无论如何,这是我得到的,以防我从代码级别做错了什么。

覆盖

class Zac_Attack_Model_Entity_Address extends Mage_Customer_Model_Entity_Address
{
    protected function _afterSave( Varien_Object $address )
    {
        // this method never gets called.
    }
}
class Zac_Attack_Model_Entity_Customer extends Mage_Customer_Model_Entity_Customer
{
    protected function _saveAddresses( Varien_Object $address )
    {
        // this method never gets called.
    }
}

config . xml

<models>
    <customer_entity>
        <rewrite>
            <address>Zac_Attack_Model_Entity_Address</address>
            <customer>Zac_Attack_Model_Entity_Customer</customer>
        </rewrite>
    </customer_entity>
</models>

重写是为了让我们可以向客户地址添加第三种类型的主地址。属性在新地址的数据库中正确设置-如果我手动将地址设置为'default_custom'地址,它将显示在前端和后端客户详细信息中,但没有模型实体,系统将不会输入地址。如果我找不到我错过的东西,我总是可以将逻辑移动到各种"保存"函数,但我更愿意保持Magento核心代码已经采用的方法。

你知道我哪里做错了吗?

您是否在app/etc/modules/*添加了配置文件?

配置文件中是否包含值为true<enabled/>节点?

配置文件是否包含正确的代码池名称?(社区或本地)。

您的模块名称是否显示在模块的高级禁用输出列表中?你有没有试过使用模块列表模块来调试为什么它没有出现?

您是否尝试过编写代码来为您实例化模型的实例并检查您的类名是否被使用

$model = Mage::getMode('foo/bar');
var_dump(get_class($model));

你确定你重写的方法没有被调用吗?

是否有另一个模块重写了相同的类?

您的config.xml不应该像:

<models>
    <customer>
        <rewrite>
            <entity_address>Zac_Attack_Model_Entity_Address</entity_address>
            <entity_customer>Zac_Attack_Model_Entity_Customer</entity_customer>
        </rewrite>
    </customer>
</models>