0

好的 - 我已阅读并喜欢关于 Magento 前端/后端的讨论,并同意 Ben 在Magento Request - Frontend or Backend 中的回答?

现在让我们提高一个档次。我们有一个客户拥有高度定制的解决方案,我们使用 Magento 观察者调用 Web 服务,更新企业 CRM 系统中的客户和客户地址数据。这些事件与 customer_save_before、customeraddress_save_before 事件无关,并且在前端和 adminhtml 端的调用略有不同(感谢 Ben!)。

现在我们看到一个循环情况,CRM 系统使用 Magento API 将更新插入到 Magento 中,这会触发 customer_save_before 事件,然后我们将数据发送回 CRM - 然后再次调用 Magento API,等等,等等,直到整个房子-o-cards倒塌。

我希望能够屏蔽入站 API 调用,但是,我找不到任何有关如何执行此操作的信息。

有什么建议么?

4

2 回答 2

1

您可以检查谁调用了该事件的块。试试看:

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

或者,您可以更改法师核心代码,以便在调度事件时为您的控件发送一些额外的数据。像那样:

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

或类似的东西。但是,如果这个事件被同一个块从同一个地方调用,并且没有任何其他行为知道它何时被 magento 或 web 服务调用,那么它是不可能的。

于 2012-08-23T18:52:28.673 回答
0

更新我之前的答案 - formdata 检测工作正常,但是,我认为这会更好 -

查看 request_uri 并查看 api 已被调用。

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

如果是这样,那么设置一个标志或做任何事情。

于 2012-08-23T20:56:18.833 回答