2012-02-08 15 views
8

¿Hay un observador que se pueda utilizar para observar eventos cuando se retira un producto del carrito? No he encontrado ninguno.Observador de artículos eliminados en el carrito

Lo que he encontrado es checkout_cart_update_items_after que se puede utilizar si se elimina un producto alterando el número de productos, pero no cuando el usuario usa el botón Eliminar. La única alternativa que veo en este momento es checkout_cart_save_after que se usa cada vez que cambia el carrito. Por supuesto, esto necesita una lógica personalizada que verifique qué producto se eliminó. No es perfecto.

¿Hay una manera mejor de tener cuidado con los eventos eliminados?

Respuesta

24

Puede utilizar el evento sales_quote_remove_item, que se distribuye en Mage_Sales_Model_Quote::removeItem().
El elemento eliminado se pasa al observador como argumento.

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

Para obtener el modelo de producto asociado en un observador de eventos, utilice $observer->getQuoteItem()->getProduct().

3

En cuanto a la cuestión de la observación de eventos (cualquiera que sean), consulte Mage_Core_Model_App::dispatchEvent(). Ejemplo de código de depuración/registro:

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... 
} 
Cuestiones relacionadas