2012-02-08 17 views
8

Czy istnieje obserwator, którego można użyć do obserwowania zdarzeń po wyjęciu produktu z koszyka? Nie znalazłem żadnego.Obserwator usuniętych przedmiotów z koszyka

Co znalazłem to checkout_cart_update_items_after, którego można użyć, jeśli produkt zostanie usunięty przez zmianę liczby produktów, ale nie wtedy, gdy użytkownik użyje przycisku usuwania. Jedyną alternatywą, jaką widzę w tej chwili, jest checkout_cart_save_after, która jest używana przy każdej zmianie koszyka. Oczywiście wymaga to niestandardowej logiki, która sprawdza, który produkt został usunięty. Nie idealny.

Czy istnieje lepszy sposób na uniknięcie zdarzeń usunięcia?

Odpowiedz

24

Można użyć zdarzenia sales_quote_remove_item, wysłanego pod numerem Mage_Sales_Model_Quote::removeItem().
Usunięty element jest przekazywany do obserwatora jako argument.

Mage::dispatchEvent('sales_quote_remove_item', array('quote_item' => $item)); 

Aby pobrać powiązany model produktu w charakterze obserwatora zdarzeń, użyj $observer->getQuoteItem()->getProduct().

3

Informacje dotyczące oglądania wydarzeń (niezależnie od tego, jakie mogą być), patrz: Mage_Core_Model_App::dispatchEvent(). Przykładowy kod debugowania/rejestrowania:

public function dispatchEvent($eventName, $args) 
{ 
    $argsArray = array(); 

    $logfile = fopen(Mage::getBaseDir().'/var/log/events.log','a'); 

    if(is_array($args)){ 
     foreach ($args as $k => $v){ 
      switch (gettype($v)) { 
       case 'object': 
        $v = get_class($v); 
        break; 
       case 'array': 
        $v = 'array'; 
      } 
      $argsArray[$k] = $v; 
     } 
    } 

    $log = $eventName.":\r\t"; 
    foreach($argsArray as $k => $v){ 
     $log .= $k; 
     $log .= "\r\t\t".$v; 
    } 
    $log .= "\r\r"; 

    fwrite($logfile,$log); 
    fclose($logfile); 

    // ...Rest of method... 
}