2009-09-02 9 views
6

Saludos, en Magento Quiero activar un evento, una vez que se ha configurado el procesamiento (por confirmación de puerta de enlace o manualmente) que, por ejemplo: Si un cliente general (ID 1) gasta más de 100 $ y el pago ha sido confirmado , establecer su id de grupo a 4 (VIP plata, que por regla general la promoción consigue descuento del 2% a nivel mundial) le daría una recompensa a esto, pero me gustaría la respuesta antes de 2 días O_o¿Cómo desencadenar un evento de pago recibido en magento?

EDITAR: la la respuesta que recibí hasta ahora es solo una respuesta parcial, también encuentro que los enlaces son muy confusos, no tengo claro cuál es la configuración mínima, qué tengo que configurar, crear, etc. También intento averiguar cómo obtener el id/modelo de los clientes que pagan.

Respuesta

31

Debe comenzar creando su propio módulo en la aplicación/código/local. Crea por ejemplo los directorios Moak/Vip. Será la raíz de tu módulo.

Con el fin de Magento para saber que existe, crear un archivo llamado Moak_Vip.xml en etc/modules, con el siguiente contenido:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Moak_Vip> 
      <active>true</active> 
      <codePool>local</codePool> 
      <self_name>Moak VIP module</self_name> 
     </Moak_Vip > 
    </modules> 
</config> 

Luego, en su directorio de módulos, necesita la siguiente estructura y archivos:

  • etc/config.xml
  • Modelo/Observer.php

El config.xml define su módulo y declara su detector de eventos para un evento dado (checkout_onepage_controller_success_action se envía cuando se completa el proceso de finalización de una página, se envía sales_order_payment_pay cuando se confirma el pago).

No necesita ninguna configuración de base de datos ya que no guardará ninguna entidad nueva. Así su archivo de configuración debería ser algo como lo siguiente:

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Moak_Vip> 
      <version>0.1.0</version> 
     </Moak_Vip> 
    </modules> 
    <global> 
     <models> 
      <moak> 
       <class>Moak_Vip_Model</class> 
      </moak> 
     </models>  
     <events> 
      <sales_order_payment_pay> 
       <observers> 
        <moak_observer> 
         <type>singleton</type> 
         <class>moak/observer</class> 
         <method>checkVipCustomer</method> 
        </moak_observer> 
       </observers> 
      </sales_order_payment_pay >  
     </events> 
    </global> 
</config> 

Ahora, su método de observador checkVipCustomer debe recibir un objeto de evento a partir del cual se puede recuperar toda la información sobre el pedido, el cliente ... y realizar las modificaciones te gusta. Eche un vistazo a las clases de modelo de Magento en la aplicación/código/núcleo/Mage /.../ Modelo/... para ver cómo navegar a través de esos objetos.

Ejemplo:

<?php 

class Moak_Vip_Model_Observer 
{ 
    public function checkVipCustomer($event) 
    { 
     $order = $event->getInvoice()->getOrder(); // Mage_Sales_Model_Order 
     /* 
      - Check order amount 
      - Get customer object 
      - Set Group id 
      - $customer->save(); 
     */ 
     return $this; 
    } 

} 

Nota no he probado ninguno de los códigos que escribí aquí, lo que debe manipularse con cuidado! Espero que haya sido de ayuda, Magento tiene una curva de aprendizaje difícil ... ¡Buena suerte!

+3

Esto es excelente, amigo. Probablemente esté un poco desactualizado, pero dio una buena idea de cómo la implementación de Magento del patrón evento/observador. ¡Aclamaciones! –

+0

"computeExpirationDate" en su config.xml probablemente debería ser "checkVipCustomer" –

+0

Tiene razón @KaeVerens, edité la respuesta. – Julien

1

Puede crear un observador para el evento "sales_order_payment_pay". Aquí hay un cheatsheet de los eventos en magento 1.3.

Y una explicación de cómo crear observer methods. Enlaces cortesía de los excelentes sitios activecodeline y inchoo.

Cuestiones relacionadas