2012-02-08 6 views
7

Tôi đang phát triển Mô-đun thanh toán cho Magento. Tôi đã làm điều này sử dụng hướng dẫn nàyMô-đun Magento Lỗi nghiêm trọng: Lớp 'Mage_Cashondelivery_Helper_Data' không được tìm thấy trong xampp htdocs magento app Mage.php trên dòng 516

http://www.magentocommerce.com/wiki/5_-_modules_and_development/payment/create-payment-method-module

Tôi đã tạo ra thư mục

app/local/Companyname/Cashondelivery/Block 
app/local/Companyname/Cashondelivery/Model 
app/local/Companyname/Cashondelivery/controller 
app/local/Companyname/Cashondelivery/etc 
app/local/Companyname/Cashondelivery/helpers 

Các etc/config.xml

<?xml version="1.0"?> 
    <config> 
     <modules> 
      <Companyname_Cashondelivery> 
    <!-- declare module's version information for database updates --> 
       <version>0.1.0</version> 
      </Companyname_Cashondelivery> 
     </modules> 

     <global> 


    <!-- declare model group for new module --> 
      <models> 
    <!-- model group alias to be used in Mage::getModel('newmodule/...') --> 
       <createorder> 
    <!-- base class name for the model group --> 
        <class>Companyname_Cashondelivery_createorder</class> 
       </createorder> 
      </models> 

    <!-- declare resource setup for new module --> 
      <resources> 
    <!-- resource identifier --> 
       <cashondelivery_setup> 
    <!-- specify that this resource is a setup resource and used for upgrades --> 
        <setup> 
    <!-- which module to look for install/upgrade files in --> 
         <module>Companyname_Cashondelivery</module> 
        </setup> 
    <!-- specify database connection for this resource --> 
        <connection> 
    <!-- do not create new connection, use predefined core setup connection --> 
         <use>core_setup</use> 
        </connection> 
       </cashondelivery_setup> 
       <cashondelivery_write> 
        <connection> 
         <use>core_write</use> 
        </connection> 
       </cashondelivery_write> 
       <cashondelivery_read> 
        <connection> 
        <use>core_read</use> 
        </connection> 
       </cashondelivery_read> 
      </resources> 
     </global> 

    <!-- declare default configuration values for this module --> 
     <default> 
    <!-- 'payment' configuration section (tab) --> 
      <payment> 
    <!-- 'newmodule' configuration group (fieldset) --> 
       <cashondelivery> 
    <!-- by default this payment method is inactive --> 
        <active>0</active> 
    <!-- model to handle logic for this payment method --> 
        <model>cashondelivery/createorder</model> 
    <!-- order status for new orders paid by this payment method --> 
        <order_status>pending</order_status> 
    <!-- default title for payment checkout page and order view page --> 
        <title>Companyname</title>     
       </cashondelivery> 
      </payment> 
     </default> 
</config> 

Ứng dụng/local/CompanyName/môđun/etc/system.xml

<?xml version="1.0"?> 
<config> 
    <sections> 
     <payment> 
      <groups> 
       <cashondelivery translate="label" module="cashondelivery"> 
        <label>Cash On Delivery</label> 
        <frontend_type>text</frontend_type> 
        <sort_order>10</sort_order> 
        <show_in_default>1</show_in_default> 
        <show_in_website>1</show_in_website> 
        <show_in_store>1</show_in_store> 
        <!--<comment>[CDATA[<a href="http://celinks.magento.com/authorize_netRegistration" target="_blank">Click here to sign up for an Authorize.net account</a>]]></comment>--> 
        <fields> 
         <active translate="label"> 
          <label>Enabled</label> 
          <frontend_type>select</frontend_type> 
          <source_model>adminhtml/system_config_source_yesno</source_model> 
          <sort_order>1</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </active> 
         <email_customer translate="label"> 
          <label>Email Customer</label> 
          <frontend_type>select</frontend_type> 
          <source_model>adminhtml/system_config_source_yesno</source_model> 
          <sort_order>10</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </email_customer> 
         <login translate="label"> 
          <label>API Login ID</label> 
          <frontend_type>obscure</frontend_type> 
          <backend_model>adminhtml/system_config_backend_encrypted</backend_model> 
          <sort_order>2</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </login> 

         <merchant_email translate="label"> 
          <label>Merchant's Email</label> 
          <frontend_type>text</frontend_type> 
          <sort_order>11</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </merchant_email> 
         <order_status translate="label"> 
          <label>New Order Status</label> 
          <frontend_type>select</frontend_type> 
          <source_model>adminhtml/system_config_source_order_status_processing</source_model> 
          <sort_order>4</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </order_status> 
         <sort_order translate="label"> 
          <label>Sort Order</label> 
          <frontend_type>text</frontend_type> 
          <sort_order>100</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </sort_order> 
         <test translate="label"> 
          <label>Test Mode</label> 
          <frontend_type>select</frontend_type> 
          <source_model>adminhtml/system_config_source_yesno</source_model> 
          <sort_order>5</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </test> 
         <debug translate="label"> 
          <label>Debug</label> 
          <frontend_type>select</frontend_type> 
          <source_model>adminhtml/system_config_source_yesno</source_model> 
          <sort_order>6</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </debug> 
         <title translate="label"> 
          <label>Title</label> 
          <frontend_type>text</frontend_type> 
          <sort_order>2</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>1</show_in_store> 
         </title> 

         <payment_action translate="label"> 
          <label>Payment Action</label> 
          <frontend_type>select</frontend_type> 
          <source_model>cashondelivery/createorder</source_model> 
          <sort_order>2</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </payment_action> 
         <cgi_url> 
          <label>Gateway URL</label> 
          <frontend_type>text</frontend_type> 
          <sort_order>5</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </cgi_url>       
         <min_order_total translate="label"> 
          <label>Minimum Order Total</label> 
          <frontend_type>text</frontend_type> 
          <sort_order>98</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </min_order_total> 
         <max_order_total translate="label"> 
          <label>Maximum Order Total</label> 
          <frontend_type>text</frontend_type> 
          <sort_order>99</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </max_order_total> 
         <allow_partial_authorization translate="label"> 
          <label>Allow Partial Authorization</label> 
          <frontend_type>select</frontend_type> 
          <source_model>adminhtml/system_config_source_yesno</source_model> 
          <sort_order>110</sort_order> 
          <show_in_default>1</show_in_default> 
          <show_in_website>1</show_in_website> 
          <show_in_store>0</show_in_store> 
         </allow_partial_authorization>      
         <model> 
         </model> 
        </fields> 
       </cashondelivery> 
      </groups> 
     </payment> 
    </sections> 
</config> 
.210

Sau đó, tôi tạo ra một lớp mô hình

<?php 
/** 
* Our test CC module adapter 
*/ 
class Companyname_Cashondelivery_Model_createorder extends Mage_Payment_Model_Method_Cc 
{ 
    /** 
    * unique internal payment method identifier 
    * 
    * @var string [a-z0-9_] 
    */ 
    protected $_code = 'newmodule'; 

    /** 
    * Here are examples of flags that will determine functionality availability 
    * of this module to be used by frontend and backend. 
    * 
    * @see all flags and their defaults in Mage_Payment_Model_Method_Abstract 
    * 
    * It is possible to have a custom dynamic logic by overloading 
    * public function can* for each flag respectively 
    */ 

    /** 
    * Is this payment method a gateway (online auth/charge) ? 
    */ 
    protected $_isGateway    = true; 

    /** 
    * Can authorize online? 
    */ 
    protected $_canAuthorize   = true; 

    /** 
    * Can capture funds online? 
    */ 
    protected $_canCapture    = false; 

    /** 
    * Can capture partial amounts online? 
    */ 
    protected $_canCapturePartial  = false; 

    /** 
    * Can refund online? 
    */ 
    protected $_canRefund    = false; 

    /** 
    * Can void transactions online? 
    */ 
    protected $_canVoid     = true; 

    /** 
    * Can use this payment method in administration panel? 
    */ 
    protected $_canUseInternal   = true; 

    /** 
    * Can show this payment method as an option on checkout payment page? 
    */ 
    protected $_canUseCheckout   = true; 

    /** 
    * Is this payment method suitable for multi-shipping checkout? 
    */ 
    protected $_canUseForMultishipping = true; 

    /** 
    * Can save credit card information for future processing? 
    */ 
    protected $_canSaveCc = false; 

    /** 
    * Here you will need to implement authorize, capture and void public methods 
    * 
    * @see examples of transaction specific public methods such as 
    * authorize, capture and void in Mage_Paygate_Model_Authorizenet 
    */   
} 
?> 

Tôi thậm chí còn tạo ra một tập tin trong ứng dụng/local/CompanyName/Cashondelivery/Helper/Data.php

<?php 
class Companyname_Cashondelivery_Helper_Data extends Mage_Core_Helper_Abstract 
{ 
} 
?> 

Nhưng tôi nhận được một lỗi khi tôi mở Configuration> Phương thức thanh toán

Fatal error: class 'Mage_Cashondelivery_Helper_Data' không tìm thấy trong C: \ xampp \ htdocs \ magento \ ứng dụng \ Mage.php trên đường dây 516

có cần thiết để có một lớp Helper. Tôi không có ý tưởng về những người giúp đỡ và Data.php

Trả lời

18

Lý do mô-đun của bạn cần một lớp helper là module luận trong System.Xml file:

<cashondelivery translate="label" module="cashondelivery"> 

Magento vượt qua module lập luận để phương thức nhà máy Mage::helper(). Điều này lần lượt hoàn thành id lớp thành cashondelivery/data.

Mage::helper('cashondelivery'); 
// identical to Mage::helper('cashondelivery/data'); 

Bây giờ Magento kiểm tra tiền tố lớp để sử dụng bằng cách tìm kiếm các nút global/helpers/cashondelivery/class mà là mất tích.

Khá đơn giản cho đến nay, nhưng đây là nơi có thể hơi khó hiểu đối với một số người.
Nếu Magento không tìm thấy tiền tố lớp trợ giúp, nó cố gắng tạo một số bằng cách đặt trước id lớp với mage_ và thêm _helper.
Vì vậy, điều này cung cấp cho bạn mage_cashondelivery_helper làm tiền tố lớp và mage_cashondelivery_helper_data làm tên lớp đầy đủ.

Trình nạp tự động biến điều này thành Mage/Cashondelivery/Helper/Data.php, không thể tìm thấy và do đó ngoại lệ bạn đang gặp phải.

Ngoài việc tạo lớp Companyname_Cashondelivery_Helper_Data, bạn cần phải thêm ánh xạ nhóm lớp vào cấu hình của mình.file xml như sau:

<global> 
    <helpers> 
    <cashondelivery> 
     <class>Companyname_Cashondelivery_Helper</class> 
    </cashondelivery> 
    </helpers> 
</global> 

nhóm lớp này để lập bản đồ lớp tiền tố là tất cả các bạn đang thiếu.

+0

Cảm ơn vinai. Vấn đề đó đã được giải quyết. Tôi đã thêm mã xml trong config.xml. Nhưng tôi tự hỏi tại sao tôi là lỗi này cho cùng một mã trên. Lỗi nghiêm trọng: Gọi hàm thành viên toOptionArray() trên một đối tượng không trong D: \ xampp \ htdocs \ magento \ app \ code \ core \ Mage \ Adminhtml \ Block \ System \ Config \ Form.php trên dòng 421 – naquiuddin

+0

I đã thêm một câu hỏi cho http://stackoverflow.com/questions/9205289/fatal-error-call-to-a-member-function-tooptionarray-on-a-non-object – naquiuddin

+0

Cảm ơn một lottttttttttt, dude. Tôi đã phát điên vì chuyện này. Bài đăng của bạn rất hữu ích. –