2012-02-08 11 views
8

Esiste un osservatore che può essere utilizzato per osservare gli eventi quando un prodotto viene rimosso dal carrello? Non ne ho trovato nessuno.Osservatore per gli articoli rimossi nel carrello

Quello che ho trovato è checkout_cart_update_items_after che può essere utilizzato se un prodotto viene rimosso modificando il conteggio del prodotto, ma non quando l'utente utilizza il pulsante Rimuovi. L'unica alternativa che vedo al momento è checkout_cart_save_after che viene utilizzata ogni volta che il carrello cambia. Ovviamente questo richiede una logica personalizzata che controlli quale prodotto è stato rimosso. Non perfetto.

Quindi c'è un modo migliore per fare attenzione a rimuovere gli eventi?

risposta

24

È possibile utilizzare l'evento sales_quote_remove_item, inviato in Mage_Sales_Model_Quote::removeItem().
L'elemento rimosso viene passato all'osservatore come argomento.

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

per ottenere il modello prodotto associato a un osservatore di eventi, utilizzare $observer->getQuoteItem()->getProduct().

3

Per quanto riguarda la visualizzazione degli eventi (qualunque essi siano), vedere Mage_Core_Model_App::dispatchEvent(). Esempio di codice di debug/registrazione:

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... 
} 
Problemi correlati