2012-02-08 6 views
8

製品をカートから取り出したときにイベントを観察するために使用できるオブザーバーはありますか?私は何も発見していない。カート内の取り外した製品のオブザーバー

私が見つけたのはcheckout_cart_update_items_afterです。製品数を変更して製品を削除した場合に使用できますが、ユーザーが削除ボタンを使用した場合は使用できません。私が現時点で見る唯一の選択肢は、checkout_cart_save_afterです。これはカートが変わるたびに使用されます。もちろん、これはどの製品が削除されたかをチェックするカスタムロジックを必要とします。完璧ではない。

削除イベントを監視するには良い方法がありますか?

答えて

24

イベントは、Mage_Sales_Model_Quote::removeItem()に送信できます。
削除された項目は、引数としてオブザーバに渡されます。

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

$observer->getQuoteItem()->getProduct()を使用して、イベントオブザーバに関連する製品モデルを取得します。

3

イベントの視聴に関する問題(何でもよい)については、Mage_Core_Model_App::dispatchEvent()を参照してください。サンプルデバッグ/ロギングコード:

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... 
} 
関連する問題