2012-02-08 10 views
7

Sto sviluppando un modulo di pagamento per Magento. Ho fatto questo utilizzando questo tutorialModulo Magento Errore irreversibile: Classe 'Mage_Cashondelivery_Helper_Data' non trovato in xampp htdocs magento app Mage.php sulla linea 516

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

ho creato la cartella

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 

La 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> 

L'applicazione/local/companyname/Modulename/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

Poi ho creato una classe di modello

<?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 
    */   
} 
?> 

Ho anche creato un file in app/local/companyname/Cashondelivery/Helper/Data.php

<?php 
class Companyname_Cashondelivery_Helper_Data extends Mage_Core_Helper_Abstract 
{ 
} 
?> 

ma ottengo un errore quando apro configurazione> Metodi di pagamento

Fatal error: 'Mage_Cashondelivery_Helper_Data' Classe non trovato in C: \ xampp \ htdocs \ Magento \ app \ Mage.php on line 516

E ' necessario avere una classe Helper. Non ho idea circa le aiutanti e Data.php

risposta

18

Il motivo per il vostro modulo ha bisogno di una classe di supporto è l'argomento module nel file di system.xml:

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

Magento passa l'argomento module a il metodo di fabbrica Mage::helper(). Questo a sua volta completa l'id della classe su cashondelivery/data.

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

Ora Magento controlla per il prefisso classe da utilizzare, cercando per il nodo global/helpers/cashondelivery/class che manca.

Piuttosto semplice finora, ma qui è dove potrebbe essere un po 'di confusione per alcuni.
Se Magento non trova un prefisso di classe helper, tenta di creare uno prefisso l'id di classe con mage_ e l'aggiunta di _helper.
Quindi questo ti dà mage_cashondelivery_helper come prefisso di classe e mage_cashondelivery_helper_data come nome di classe completo.

Il caricatore automatico trasforma questo in Mage/Cashondelivery/Helper/Data.php, che non può essere trovato, e quindi l'eccezione che si stanno vivendo.

Oltre a creare la classe Companyname_Cashondelivery_Helper_Data, è necessario aggiungere il mapping del gruppo di classi alla configurazione.file XML come segue:

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

Questo gruppo classe per mapping prefisso di classe è tutto ciò che manca.

+0

Grazie vinai. Quel problema risolto. Ho aggiunto il codice xml in config.xml. Ma mi chiedo perché sono questo errore per lo stesso codice sopra. Errore irreversibile: chiamata a una funzione membro aOptionArray() su un oggetto non in D: \ xampp \ htdocs \ magento \ app \ code \ core \ Mage \ Adminhtml \ Block \ System \ Config \ Form.php sulla riga 421 – naquiuddin

+0

I ho aggiunto una domanda per questo http://stackoverflow.com/questions/9205289/fatal-error-call-to-a-member-function-tooptionarray-on-a-non-object – naquiuddin

+0

Grazie a lottttttttttt, amico. Stavo impazzendo per questo. Il tuo post è stato molto utile –

Problemi correlati