2009-09-02 27 views
6

Saluti, in Magento voglio attivare un evento, una volta che un ordine è stato impostato per l'elaborazione (tramite conferma del gateway o manualmente), ad esempio: Se un cliente generale (id 1) spende oltre 100 $ e il pagamento è stato confermato , impostare il suo ID del gruppo a 4 (VIP argento, che dalla regola di promozione ottiene il 2% di sconto a livello globale) darei una taglia per questo, ma mi piacerebbe la risposta prima di 2 giorni O_oCome attivare un evento a pagamento ricevuto in Magento?

EDIT: il risposta che ho ricevuto finora è solo una risposta parziale, inoltre trovo i collegamenti molto confusi, non sono chiaro su quale sia l'impostazione minima, cosa devo configurare creare ecc ... Inoltre sto cercando di scoprire come ottenere l'id/modello del cliente pagante.

risposta

31

Si dovrebbe iniziare creando il proprio modulo in app/code/local. Creare ad esempio le directory Moak/Vip. Sarà la radice del tuo modulo.

Affinché Magento sapere che esiste, creare un file denominato Moak_Vip.xml in etc/modules, con il seguente contenuto:

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

Poi, nella directory del modulo, è necessario la seguente struttura e file:

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

Config.xml definisce il modulo e dichiara il listener di eventi per un dato evento (checkout_onepage_controller_success_action viene inviato quando il processo di checkout in carico è completo, sales_order_payment_pay viene inviato quando il pagamento è stato confermato).

Non è necessaria alcuna configurazione del DB poiché non si salverà alcuna nuova entità. Così il vostro file di configurazione dovrebbe essere simile a quanto segue:

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

Ora, il metodo di osservatore checkVipCustomer dovrebbe ricevere un oggetto evento da cui è possibile recuperare tutte le informazioni circa l'ordine, il cliente ... ed eseguire le modifiche ti piace. Dai un'occhiata alle classi del modello Magento in app/code/core/Mage /.../ Model/... per vedere come navigare attraverso questi oggetti.

Esempio:

<?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 che non ho testato qualsiasi del codice che ho scritto qui, in modo da maneggiare con cura! Spero che abbia aiutato, Magento ha una dura curva di apprendimento ... Buona fortuna!

+3

Questo è eccellente, amico. Probabilmente è un po 'datato, ma ha dato una buona idea di come l'implementazione di Magento del pattern evento/osservatore. Saluti! –

+0

"computeExpirationDate" nel tuo config.xml dovrebbe probabilmente essere "checkVipCustomer" –

+0

Hai ragione @KaeVerens, ho modificato la risposta. – Julien

1

È possibile creare un osservatore per l'evento "sales_order_payment_pay". Ecco uno cheatsheet degli eventi in Magento 1.3.

E una spiegazione su come creare observer methods. Link per gentile concessione dell'eccellente linea di attività e di siti di piccole dimensioni.