2009-09-02 43 views
6

Pozdrowienia, w Magento Chcę wywołać zdarzenie, gdy zamówienie zostanie ustawione na przetwarzanie (przez potwierdzenie bramy lub ręcznie), na przykład: Jeśli klient ogólny (identyfikator 1) wyda ponad 100 $ i płatność zostanie potwierdzona ustaw swój identyfikator grupy do 4 (srebro VIP, który przez reguły promocji otrzymuje rabat 2% na świecie) dałbym bounty na to, ale chciałbym odpowiedzi przed 2 dni O_oJak wywołać zdarzenie na płatność otrzymaną w Magento?

EDIT: the odpowiedź, jaką otrzymałem do tej pory, jest tylko częściową odpowiedzią, również linki są bardzo mylące, nie jestem pewien, na czym polega minimalna konfiguracja, co mam skonfigurować, aby skonfigurować itd. ... Próbuję też dowiedzieć się jak uzyskać identyfikator/model płatniczego klienta.

Odpowiedz

31

Należy rozpocząć od utworzenia własnego modułu w aplikacji/code/local. Utwórz na przykład katalogi Moak/Vip. To będzie podstawa twojego modułu.

Aby Magento wiedzieć, że istnieje, utwórz plik o nazwie Moak_Vip.xml w etc/modules, o następującej treści:

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

Następnie w katalogu modułu, trzeba następującą strukturę i pliki:

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

Plik config.xml definiuje moduł i deklaruje odbiornik zdarzeń dla danego zdarzenia (checkout_onepage_controller_success_action jest wysyłany, gdy proces pobierania strony zakończy się, sales_order_payment_pay zostanie wysłany po potwierdzeniu płatności).

Nie potrzebujesz żadnego ustawienia bazy danych, ponieważ nie będziesz zapisywać żadnych nowych obiektów. więc plik konfiguracyjny powinien wyglądać mniej więcej tak:

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

Teraz metoda Observer checkVipCustomer powinien otrzymać obiekt zdarzenia, z których można pobrać wszystkie informacje dotyczące zlecenia, klienta ... i wykonać modyfikacje lubisz. Zobacz klasy modeli Magento w aplikacji/code/core/Mage /.../ Model/... , aby zobaczyć, jak poruszać się po tych obiektach.

Przykład:

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

} 

Uwaga Nie Przetestowałem dowolnego kodu pisałem tutaj, aby poradzić się ostrożnie! Mam nadzieję, że pomógł, Magento ma trudną ścieżkę uczenia się ... Powodzenia!

+3

To jest doskonałe, kolego. Jest to prawdopodobnie nieco nieaktualne, ale dało dobre pojęcie o tym, w jaki sposób Magento implementuje wzorzec wydarzenia/obserwatora. Twoje zdrowie! –

+0

"computeExpirationDate" w pliku config.xml powinno prawdopodobnie być "checkVipCustomer" –

+0

Masz rację. @KaeVerens, zredagowałem odpowiedź. – Julien

1

Możesz utworzyć obserwatora dla zdarzenia "sales_order_payment_pay". Oto cheatsheet wydarzeń w magento 1.3.

Wyjaśnienie, jak utworzyć observer methods. Linki dzięki uprzejmości wspaniałej strony activecodeline i inchoo.

Powiązane problemy