Magento第三方模型覆盖

时间:2014-06-23 22:56:36

标签: php magento

我试图仅覆盖第三方扩展模型的一部分(“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行。我错过了什么吗?我是否需要在配置部分覆盖?

1 个答案:

答案 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由这个模块本身定义。

  • 你能做什么?

在您的问题中,您提到过,您需要在自定义表中添加一些额外的列字段。为此,您需要使用一些升级脚本。这里给出了一些参考12。你可能会得到更多的教程。

由于