2012-02-08 17 views
7

Estoy desarrollando un Módulo de pago para Magento. Hice esto usando este tutorialMódulo Magento Error fatal: Clase 'Mage_Cashondelivery_Helper_Data' no encontrada en xampp htdocs magento app Mage.php en la línea 516

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

He creado la carpeta

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 

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

La aplicación/local/Nombre de la empresa/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> 

Entonces creó una clase del modelo

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

incluso he creado un archivo de aplicación/local/Nombre de la empresa/Cashondelivery/Ayudante/Data.php

<?php 
class Companyname_Cashondelivery_Helper_Data extends Mage_Core_Helper_Abstract 
{ 
} 
?> 

pero me da un error al abrir configuración> Métodos de pago

Fatal error: 'Mage_Cashondelivery_Helper_Data' clase no se encuentra en C: \ xampp \ htdocs \ Magento \ app \ Mage.php en la línea 516

¿es necesario tener una clase de ayuda. No tengo ni idea acerca de los ayudantes y Data.php

Respuesta

18

La razón de su módulo necesita una clase de ayuda es el argumento module en el archivo system.xml:

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

Magento pasa el argumento a module el método de fábrica Mage::helper(). Esto a su vez completa la identificación de clase a cashondelivery/data.

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

Ahora Magento cheques por el prefijo clase que se utiliza buscando el nodo global/helpers/cashondelivery/class que le falta.

Bastante sencillo hasta ahora, pero aquí es donde podría ser un poco confuso para algunos.
Si Magento no encuentra un prefijo de clase auxiliar, intenta hacer una hasta prefijando la identificación de clase con mage_ y anexando _helper.
Esto le da mage_cashondelivery_helper como prefijo de clase y mage_cashondelivery_helper_data como nombre de clase completo.

El cargador automático se convierte esto en Mago/Cashondelivery/Ayudante/Data.php, que no se puede encontrar, y por lo tanto la excepción que está experimentando.

Además de crear la clase Companyname_Cashondelivery_Helper_Data, debe agregar la asignación del grupo de clases a su configuración.archivo XML de la siguiente manera:

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

Este grupo de la clase a la cartografía prefijo de clase es todo lo que se echa en falta.

+0

Gracias vinai. Ese problema resuelto. He agregado el código xml en config.xml. Pero me pregunto por qué estoy este error por el mismo código anterior. Error fatal: llamar a una función miembro aOptionArray() en un objeto no en D: \ xampp \ htdocs \ magento \ app \ code \ core \ Mage \ Adminhtml \ Block \ System \ Config \ Form.php en la línea 421 – naquiuddin

+0

I he añadido una pregunta para este http://stackoverflow.com/questions/9205289/fatal-error-call-to-a-member-function-tooptionarray-on-a-non-object – naquiuddin

+0

Gracias muchtttttttttt, amigo. Me estaba volviendo loco por esto. Tu publicación ha sido muy útil. –

Cuestiones relacionadas