2012-07-31 24 views
7

Quiero agregar un nuevo campo personalizado a la página de pago en Magento. He creado un módulo con instalador:¿Cómo agregar un campo personalizado para ordenar en Magento?

$installer = $this; 
$installer->startSetup(); 
$setup = new Mage_Eav_Model_Entity_Setup('core_setup'); 

$setup->addAttribute('order', 'deliverydate', array(
    'position'  => 1, 
    'input'   => 'text', 
    'type'   => 'varchar', 
    'label'   => 'Choose delivery date', 
    'visible'  => 1, 
    'required'  => 0, 
    'user_defined' => 1, 
    'global'  => 1, 
    'visible_on_front' => 1, 
)); 

$installer->endSetup(); 

puedo ver con phpmyadmin que el campo ha sido añadido a mage_eav_attribute mesa. También he agregado esto a shipping-method.phtml:

<div class="form-list field"> 
    <label for="deliverydate"><?php echo $this->__('Choose delivery date') ?></label> 
     <div class="input-box"> 
     <input type="text" name="deliverydate" id="deliverydate" title="<?php echo $this->__('deliverydate') ?>" class="input-text" /> 
    </div> 
</div> 

Cuando hago un pedido, el campo personalizado no se guardará. ¿Cómo hacer que funcione? He agregado algunos campos personalizados al cliente de esta manera y están funcionando bien. También puedo ver mis campos de clientes personalizados automáticamente en admin/customer pero no puedo ver mi campo de pedido personalizado en admin/sales_order. Gracias

* Editar:

Esto es lo que he hecho:

he añadido a observer.php companyName/módulo/modelo/observer.php

class Company_Module_Model_Observer 
{ 
    public function Deliverydate($observer){ 
     //get event data 
     $event = $observer->getEvent(); 

       //get order 
     $order = $event->getOrder(); 

     //set the country here 
     $order->setDeliverydate('11.11.2012'); 
     //echo "observer"; 
     } 
} 

Y aquí está mi config.xml:

<?xml version="1.0"?> 
<config> 
    <modules> 
    <Company_Module> 
     <version>0.1.0</version> 
    </Company_Module> 
    </modules> 
    <global> 
    <resources> 
    <Company_Module_setup> 
    <setup> 
     <module>Company_Module</module> 
     <class>Company_Module_Model_Resource_Mysql4_Setup</class> 
    </setup> 
    </Company_Module_setup> 
</resources> 
     <events> 
      <checkout_type_onepage_save_order> 
       <observers> 
        <Company_Module_Model_Observer> 
         <type>singleton</type> 
         <class>Company_Module_Model_Observer</class> 
         <method>Deliverydate</method> 
        </Company_Module_Model_Observer> 
       </observers> 
      </checkout_type_onepage_save_order> 
     </events> 
    </global> 
</config> 

I Creo que hay algún problema con mi observador. Creo que no está disparando.

* Editar:

Mi observador está trabajando ahora. El nombre del archivo debe ser Observer.php, not observer.php.

+0

podría compartir la plena code.for me .TENGO añadir en la pestaña de revisión de la orden .. –

Respuesta

13

Añadir un observador:

<events> 
    <checkout_type_onepage_save_order> 
     <observers> 
      <Savefield_observer> 
       <type>singleton</type> 
       <class>mymodule/observer</class> 
       <method>Savefield</method> 
      </Savefield_observer> 
     </observers> 
    </checkout_type_onepage_save_order> 
</events> 

Y en el archivo mimodulo/saveField/modelo/obsever.php añadir lo siguiente:

class Mymodule_Savefield_Model_Observer 
{ 
    public function Savefield($observer){ 
     //get event data 
     $event = $observer->getEvent(); 

     //get order 
     $order = $event->getOrder(); 

     //set the variable here 
     $order->setMyField($fieldVal); 
    } 
} 
+1

Me parece que no puede hacer que funcione. – Joonas

+0

Agregué más información a mi pregunta. – Joonas

+0

Está funcionando ahora y tu respuesta me mostró la dirección correcta. ¡Gracias! – Joonas

0

Usted puede agregar algunos observadores de eventos para capturar cita ahorrar y carga eventos Inserte el siguiente código en su módulo config.xml dentro de la etiqueta <global>.

<events> 

<sales_quote_save_before> <!-- Event Called Before Quote Object is saved --> 

<observers> 

<save_before> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>saveQuoteBefore</method> <!-- name of function --> 

</save_before> 

</observers> 

</sales_quote_save_before> 

<sales_quote_save_after> <!-- Event called After Quote Object is saved --> 

<observers> 

<save_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>saveQuoteAfter</method> <!-- name of function --> 

</save_after> 

</observers> 

</sales_quote_save_after> 

<sales_quote_load_after> <!-- Event called when Quote Object is loaded --> 

<observers> 

<load_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>loadQuoteAfter</method> <!-- name of function --> 

</load_after> 

</observers> 

</sales_quote_load_after> 

<sales_model_service_quote_submit_after> <!-- Event called after order placed --> 

<observers> 

<sales_model_service_quote_submit_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>saveOrderAfter</method> <!-- name of function --> 

</sales_model_service_quote_submit_after> 

</observers> 

</sales_model_service_quote_submit_after> 

<sales_order_load_after> <!-- Event called after Order Object is loaded --> 

<observers> 

<sales_order_load_after> 

<type>singleton</type> 

<class>Excellence_Custom_Model_Observer</class> <!-- Over Model Class --> 

<method>loadOrderAfter</method> <!-- name of function --> 

</sales_order_load_after> 

</observers> 

</sales_order_load_after> 

</events> 

Agregar campos personalizados a la página de compra implica varios pasos y necesita editar varios archivos. Para una guía completa paso a paso, visite el siguiente tutorial.

http://www.demagento.com/tutorial-magento-add-custom-field-to-order-checkout-page/

Cuestiones relacionadas