如何在Magento中调用自定义模块/模型类

时间:2016-05-09 06:52:14

标签: magento magento-1.7 magento-1.9

我必须在billing.phtml中调用自定义Module类,它在结帐页面上显示额外的字段。

但我得到了PHP Fatal error: Call to a member function getAllOptions() on a non-object

以下是我的代码 -

文件名 - Business.php

文件路径 - /var/www/html/app/code/community/Partsimple/CustomFields/Model/Primarybusiness

class Partsimple_CustomFields_Model_Primarybusiness_Business extends Mage_Eav_Model_Entity_Attribute_Source_Table
{
    public function getAllOptions()
    {
        if (!$this->_options) {


           $this->_options[] = array(
                    'value' => '',
                    'label' => 'Please Select Primary Business'
            );
            $this->_options[] = array(
                    'value' => 1,
                    'label' => 'End Consumer / DIY'
            );
            $this->_options[] = array(
                    'value' => 2,
                    'label' => 'Service Technician'
            );
            $this->_options[] = array(
                    'value' => 3,
                    'label' => 'Other Professional'
            );

         //   $this->_options = Mage::getResourceModel('directory/region_collection')->load()->toOptionArray();

        }
        return $this->_options;
    }
}

**文件名 - ** config.xml ****

<config>
    <modules>
        <Partsimple_CustomFields>
            <version>1.0.1</version>
        </Partsimple_CustomFields>
    </modules>
    <global>
        <models>
            <Partsimple_CustomFields>
                <class>Partsimple_CustomFields_Model</class>
            </Partsimple_CustomFields>
        </models>
        <fieldsets>
            <customer_account>
            <vendor_account>
                <create>1</create>
                <update>1</update>
            </vendor_account>
            </customer_account>
            <customer_address>
            <vendor_account>
                <to_quote_address>*</to_quote_address>
            </vendor_account>
            <primary_business>
                    <to_quote_address>*</to_quote_address>
            <primary_business>
            </customer_address>
            <sales_convert_order_address>
            <vendor_account>
                <to_quote_address>*</to_quote_address>
                </vendor_account>
            </sales_convert_order_address>
            <sales_convert_quote_address>
                <vendor_account>
                    <to_order_address>*</to_order_address>
                    <to_customer_address>*</to_customer_address>
                </vendor_account>
                <primary_business>
                    <to_order_address>*</to_order_address>
                    <to_customer_address>*</to_customer_address>
                </primary_business>
            </sales_convert_quote_address>
        </fieldsets>
    </global>   
</config>

我正在 billing.phtml 文件的下面写一行来调用上面的business.php类方法getAlloptions();

<?php  echo Mage::getModel('partsimple/customFields_model_primarybusiness_business')->getAllOptions();?>

我也试过打印课程

<?php  echo "Class: ".get_class(Mage::getModel('partsimple/customfields_model_primarybusiness_business'));?>

但我一无所获。 请让我知道我做错了什么, 我想在billing.phtml上调用这个方法。

更新

在config.xml文件中进行更正后,其工作正常。

  

要检查config.xml中的错误,请在&gt;中编辑后在浏览器中打开此文件任何编辑器都会显示错误。

现在该属性显示结帐页面和管理客户页面以及客户我的帐户部分,但在此部分中。我无法更新它。需要在config.xml fot customer_account标记中添加哪些字段。

我在config.xml

中添加了这样的内容
<customer_account>
   <primary_business>
       <create>1</create>
         <update>1</update>
   </primary_business>
</customer_account>

3 个答案:

答案 0 :(得分:0)

您是否在名为Partsimple_CustomFields.xml的app / etc / modules中添加了此文件:

<?xml version="1.0" encoding="UTF-8"?>    
<config>
    <modules>
        <Partsimple_CustomFields>
            <active>true</active>
            <codePool>community</codePool>
        </Partsimple_CustomFields>
    </modules>
</config>

答案 1 :(得分:0)

你说magento你的模型将被调用&#34; Partsimple_CustomFields&#34;在config.xml中,所以你应该总是使用名称&#34; Partsimple_CustomFields&#34;来调用你的模型。如下:

<?php  echo Mage::getModel('Partsimple_CustomFields/primarybusiness_business')->getAllOptions();?>

答案 2 :(得分:0)

您需要查看<models>节点。您将模型分组为Partsimple_CustomFields,但您尝试使用此Mage::getModel('partsimple/customFields_model_primarybusiness_business')实例化您的类。您需要更改模型节点中的第一个节点,如下所示

    <models>
        <partsimple>
            <class>Partsimple_CustomFields_Model</class>
        </partsimple>
    </models>

或者您需要像这样实例化您的模型:

Mage::getModel('Partsimple_CustomFields/customfields_model_primarybusiness_business')

<models>, <blocks>, and <helpers>内的第一个节点是您的分组节点。当Magento试图确定您打算实例化的类时,Mage_Core_Model_Config::getGroupedClassName($groupType, $classId, $groupRootNode)被要求将Partsimple_CustomFields / customfields_model_primarybusiness_business转换为实际的类名。它会检查你的config.xml。

我还应该提一下,通常的做法是不要在模型,块和助手节点中使用任何大写字母。