2009-09-02 3 views
6

Grüße, in Magento Ich möchte ein Ereignis auslösen, sobald ein Auftrag auf die Verarbeitung eingestellt wurde (durch Gateway-Bestätigung oder manuell), Beispiel: Wenn ein allgemeiner Kunde (ID 1) mehr als 100 $ ausgibt und die Zahlung bestätigt wurde gesetzt, seine Gruppen-ID 4 (Silber VIP, die durch Förderung der Regel global 2% Rabatt bekommt) ich würde eine Prämie dazu geben, aber ich würde die Antwort vor 2 Tagen O_oWie löst man ein Ereignis bei einer Zahlung in Magento aus?

EDIT mag: die antwort ich habe bisher nur eine teilantwort erhalten, auch finde ich die links sehr unübersichtlich, mir ist nicht klar was ist das minimale setup, was muss ich konfigurieren etc erstellen ... auch ich versuche es herauszufinden wie man die zahlende Kunden ID/Modell bekommt.

Antwort

31

Sie sollten beginnen, indem Sie Ihr eigenes Modul in app/code/local erstellen. Erstellen Sie zum Beispiel die Verzeichnisse Moak/Vip. Es wird die Wurzel Ihres Moduls sein.

Damit Magento wissen, dass es existiert, erstellen Sie eine Datei mit dem Namen Moak_Vip.xml in etc/modules, mit folgendem Inhalt:

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

Dann in Ihrem Modulverzeichnis, müssen Sie die folgende Struktur und Dateien:

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

Die Datei config.xml definiert Ihr Modul und deklariert Ihren Ereignis-Listener für ein bestimmtes Ereignis (checkout_onepage_controller_success_action wird gesendet, wenn der One-Page-Checkout-Prozess abgeschlossen ist, sales_order_payment_pay wird gesendet, wenn die Zahlung bestätigt wurde).

Sie benötigen keine DB-Konfiguration, da Sie keine neue Entität speichern. So sollten Sie Ihre Konfigurationsdatei so etwas wie folgt aussehen:

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

nun Ihre Observer Methode checkVipCustomer sollte ein Ereignisobjekt erhalten, von dem Sie alle Informationen über die Reihenfolge abrufen kann, den Kunden ... und die Änderungen durchführen du magst. Werfen Sie einen Blick auf Magento-Modellklassen in App/Code/Kern/Mage /.../ Model/... , um zu sehen, wie Sie durch diese Objekte navigieren.

Beispiel:

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

} 

Hinweis Ich habe einen der Code nicht getestet ich hier geschrieben habe, so pfleglich behandeln! Hoffe, es hat geholfen, Magento hat eine harte Lernkurve ... Viel Glück!

+3

Das ist ausgezeichnet, Kumpel. Es ist wahrscheinlich ein bisschen veraltet, aber es gab eine gute Vorstellung davon, wie Magento das Ereignis-/Beobachtermuster implementiert hat. Prost! –

+0

"computeExpirationDate" in Ihrer config.xml sollte wahrscheinlich "checkVipCustomer" sein –

+0

Sie haben Recht @KaeVerens, habe ich die Antwort bearbeitet. – Julien

1

Sie können einen Beobachter für das Ereignis "sales_order_payment_pay" erstellen. Hier ist ein cheatsheet der Ereignisse in Magento 1.3.

Und eine Erklärung zum Erstellen observer methods. Links mit freundlicher Genehmigung der ausgezeichneten ActiveCodeline und Inchoo Seiten.

Verwandte Themen