2011-11-10 13 views
2

商品の削除のためのオブザーバーを作成したいと思います。管理者が削除中に製品を削除するときの手段このプロセスでカスタム機能をいくつか追加します。現在、私はこの目的のために製品削除オブザーバー

catalog_controller_product_delete 

を使用しています。しかし、それは私のために何もしていない。私を助けてください。製品の削除中に何か余分なことをするには?

私はこの製品のコピーを持っている私のAPIに削除済みの製品IDを送信したいので、そこから削除することもできますが、イベントをトリガーしません。私は<method>sendProductDelReq</method>によってsendProductDelReq()メソッドをトリガーしているので、私はこれを知っています。私はこのメソッドにdieを入れました。

答えて

5

同じ問題に遭遇し、ここで回答を見つけようとしていた人々のために。
問題が見つかりました。
まず、製品をどのように削除していますか?
製品の編集ページから製品を削除する場合、オブザーバーが機能しない可能性があります。
Product Gridページから製品を削除する場合、オブザーバは正常に動作します。 catalog_controller_product_delete、唯一productController()massDeleteAction()に派遣します:

問題は、イベントがあることです。
およびdeleteAction()

私はすでにmagentocommerce.com/bug-trackingにバグとしてこの問題を提出しています。この問題を解決するには

、このペースト:あなたのdeleteActionインサイド

Mage::dispatchEvent('catalog_controller_product_delete', array('product' => $product)); 

()、右ので、同様$product->delete();
前:今日同様の問題のためのビットを検索した後

public function deleteAction() 
{ 
    if ($id = $this->getRequest()->getParam('id')) { 
     $product = Mage::getModel('catalog/product') 
      ->load($id); 
     $sku = $product->getSku(); 
     try { 
      Mage::dispatchEvent('catalog_controller_product_delete', array('product' => $product)); 
      $product->delete(); 
      $this->_getSession()->addSuccess($this->__('The product has been deleted.')); 
     } catch (Exception $e) { 
      $this->_getSession()->addError($e->getMessage()); 
     } 
    } 
    $this->getResponse() 
     ->setRedirect($this->getUrl('*/*/', array('store'=>$this->getRequest()->getParam('store')))); 
} 
+0

私はこれが必要ではありません。このソリューションは、コードを変更しなくてもうまく動作します。http://stackoverflow.com/a/14211286/515268 – Dayson

+0

@dayson、私は他のソリューションが**より良い**とは思わない?あなたは同じことを達成しています。 Magentoの人たちは、私の[pull request](https://github.com/magento/magento2/pull/9#issuecomment-5059665)のコメントでも読んでいただけるようにバグだと認めています。 jmvaさん。コアコードを編集するのが間違っていると思われる場合は、独自のモジュールでproductControllerを拡張してそこで編集してください。 – Chris

0

を私が見つけましたthis pull requestのおかげで削除の別のイベント。

catalog_product_delete_beforeイベントは、Mage_Core_Model_Abstract :: _ beforeDelete()で送出されます。グリッドと編集ページの個々の削除のために働きます。

このイベントはMagento event listに示されていないあなたが実際にcatalog_product_delete_beforecatalog_product_delete_afterイベントを使用する必要があります

grep -rin -B2 -A2 "Mage::dispatchEvent" app/* > events.txt 
1

を使用して作成しました。製品があることをあなたがケースを得ることができ、そうでない場合

public function delete() 
{ 
    parent::delete(); 
    Mage::dispatchEvent($this->_eventPrefix.'_delete_after_done', array($this->_eventObject=>$this)); 
    return $this; 
} 

:ここで

もっとhttps://stackoverflow.com/a/14211286/515268

0

私はcatalog_product_delete_after_done

Mage_Catalog_Model_Productは、次のようにdispatchEventを持って適切なイベントだと思いますMagentoでは削除されましたが、APIでは削除されていません。

0

また、任意のコアファイルを変更せずに

model_delete_after

を使用することができます。

ここでは、model_delete_afterイベントをディスパッチするafter delete関数について簡単に説明します。

protected function _afterDelete() 
{ 
    Mage::dispatchEvent('model_delete_after', array('object'=>$this)); 

    Mage::dispatchEvent($this->_eventPrefix.'_delete_after', $this->_getEventData()); 
    return $this; 
} 
関連する問題