0

OK-私はMagentoのフロントエンド/バックエンドに関する議論を読んで気に入っており、Magentoのリクエスト-フロントエンドまたはバックエンドでのベンの答えに同意しますか?

それでは、ワンランク上のものにしましょう。Magentoオブザーバーを使用して、企業のCRMシステムの顧客および顧客の住所データを更新するWebサービスを呼び出す、高度にカスタマイズされたソリューションを使用している顧客がいます。これらのイベントはcustomer_save_before、customeraddress_save_beforeイベントにぶら下がっており、フロントエンド側とadminhtml側でわずかに異なる呼び出しがあります(Benに感謝します)。

これで、CRMシステムがMagento APIを使用して更新をMagentoに挿入し、customer_save_beforeイベントを発生させてから、データをCRMに送り返すループ状況が発生しています。CRMはMagentoAPIを再度呼び出します。 、などなど、house-o-cards全体が転倒するまで。

インバウンドAPI呼び出しをマスクできるようにしたいのですが、その方法に関する情報が見つかりません。

助言がありますか?

4

2 に答える 2

1

イベントを呼び出したブロックを確認できます。それを試してみてください:

$block = $observer->getEvent()->getBlock();
    if ($block instanceof Your_block_name) {
//do something

または、mage コア コードを変更して、イベントをディスパッチするときにコントロール用の追加データを送信することもできます。そのように:

Mage::dispatchEvent('customer_save_before',array('flag'=>'1'));

またはそのようなもの。しかし、このイベントが同じブロックによって同じ場所から離れて呼び出され、magento または Web サービスによっていつ呼び出されたかを知る他の動作がない場合、それは不可能です。

于 2012-08-23T18:52:28.673 に答える
0

Updating my previous answer - the formdata detection worked OK, but, I think this will work even better -

Look at the request_uri and see of the api has been called.

if (stripos($_SERVER['REQUEST_URI'], "index.php/api")) {
   $ApiCall=true;
}

If so then set a flag or do whatever.

于 2012-08-23T20:56:18.833 に答える