我试图仅覆盖第三方扩展模型的一部分(“Userprofile”功能),以包含更多列和调用来检索新信息。这是第三方config.xml:
<models>
<marketplace>
<class>Webkul_Marketplace_Model</class>
<resourceModel>marketplace_mysql4</resourceModel>
</marketplace>
<marketplace_mysql4>
<class>Webkul_Marketplace_Model_Mysql4</class>
<entities>
<product>
<table>marketplace_product</table>
</product>
<userprofile>
<table>marketplace_userdata</table>
</userprofile>
<feedback>
<table>marketplace_datafeedback</table>
</feedback>
<saleperpartner>
<table>marketplace_saleperpartner</table>
</saleperpartner>
<saleslist>
<table>marketplace_saleslist</table>
</saleslist>
</entities>
</marketplace_mysql4>
</models>
这是我自己的config.xml:
<models>
<zerobars_marketplacepayment>
<class>ZeroBars_Marketplacepayment_Model</class>
</zerobars_marketplacepayment>
<marketplace>
<rewrite>
<userprofile>ZeroBars_Marketplacepayment_Model_Userprofile</userprofile>
</rewrite>
</marketplace>
<marketplace_mysql4>
<rewrite>
<userprofile>ZeroBars_Marketplacepayment_Model_Mysql4_Userprofile</userprofile>
<userprofile_collection>ZeroBars_Marketplacepayment_Model_Mysql4_Userprofile_Collection</userprofile_collection>
</rewrite>
</marketplace_mysql4>
</models>
我将所有Userprofile文档复制到我的模型结构中,就像它们在原始扩展中一样,除了用我自己的命名替换“marketplace”命名空间:
<?php
class ZeroBars_Marketplacepayment_Model_Userprofile extends Mage_Core_Model_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init('zerobars_marketplacepayment/userprofile');
}
public function getPartnerProfileById($partnerId) {
$data = array();
if ($partnerId != '') {
$collection = Mage::getModel('zerobars_marketplacepayment/userprofile')->getCollection();
$collection->addFieldToFilter('mageuserid',array('eq'=>$partnerId));
$user = Mage::getModel('customer/customer')->load($partnerId);
....
但是我仍然收到一个“致命错误:在/home/devzerob/public_html/app/code/local/ZeroBars/Marketplacepayment/Model/Userprofile.php上的非对象上调用成员函数getCollection()第14行“
错误源自PHP文件的$ collection行。我错过了什么吗?我是否需要在配置部分覆盖?
答案 0 :(得分:1)
在您打算重写自定义模型扩展的模型文件中,存在一些问题。我会注意到你现在能看到的主要问题是什么。
模型扩展了错误的类
您的模型类现在扩展了类Mage_Core_Model_Abstract
,在您的情况下,您需要扩展Webkul_Marketplace_Model_Userprofile
。这是因为你要覆盖这个类。因此,自定义类应该从该类本身继承是至关重要的。
引用错误的模型
现在,模型集合由此代码段执行
$collection = Mage::getModel('zerobars_marketplacepayment/userprofile')->getCollection();
这告诉magento,嘿magento我需要从模型ZeroBars_Marketplacepayment_Model_Userprofile
收集所有数据。这种方法肯定会引发错误,因为这个模型引用了你的模块并且不包含任何集合,资源(我假设如此)。所以你可能需要使用
$collection = Mage::getModel('marketplace/userprofile')->getCollection();
现在集合引用Webkul_Marketplace_Model_Userprofile
,它确实有一个集合,资源定义。我也希望mageuserid
由这个模块本身定义。
你能做什么?
在您的问题中,您提到过,您需要在自定义表中添加一些额外的列字段。为此,您需要使用一些升级脚本。这里给出了一些参考1,2。你可能会得到更多的教程。
由于