2012-02-08 29 views
8

Có người quan sát nào có thể được sử dụng để quan sát các sự kiện khi sản phẩm bị lấy ra khỏi giỏ hàng không? Tôi đã không tìm thấy bất kỳ.Máy quan sát đối với các mặt hàng đã bị xóa trong giỏ hàng

Điều tôi đã tìm thấy là checkout_cart_update_items_after có thể được sử dụng nếu sản phẩm bị xóa bằng cách thay đổi số lượng sản phẩm, nhưng không phải khi người dùng sử dụng nút xóa. Cách thay thế duy nhất tôi thấy trong thời điểm này là checkout_cart_save_after được sử dụng bất cứ khi nào giỏ hàng thay đổi. Tất nhiên điều này cần logic tùy chỉnh mà kiểm tra sản phẩm đã được gỡ bỏ. Không hoàn hảo.

Vì vậy, có cách nào tốt hơn để xem để xóa sự kiện?

Trả lời

24

Bạn có thể sử dụng sự kiện sales_quote_remove_item, được gửi đi theo số Mage_Sales_Model_Quote::removeItem().
Mục đã xóa được chuyển cho người quan sát làm đối số.

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

Để có được mô hình sản phẩm liên quan trong một người quan sát sự kiện, sử dụng $observer->getQuoteItem()->getProduct().

3

Về câu hỏi xem sự kiện (bất kể chúng có thể là gì), xem Mage_Core_Model_App::dispatchEvent(). Mã gỡ lỗi/ghi nhật ký mẫu:

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... 
} 
Các vấn đề liên quan