Magento Observer事件无效并在Observer类中使用Web服务

时间:2014-09-04 15:14:23

标签: web-services magento soap module observers

我尝试使用来自网络服务的值创建动态产品折扣。

我已经在互联网上搜索了一些关于此事的指南,我发现我需要使用checkout_cart_product_add_aftercheckout_cart_update_items_after

但是,我遵循了一些指南。创建了我自己的模块(在Magento后台可见:配置>高级>模块)和该模块的观察者。我没有创造更多东西,但它没有工作。由于我可以在该菜单中看到该模块,我相信问题出在观察者/事件调用上。

以下是我的模块的config.xml(位于app \ code \ local \ namespace \ MyModule \ etc中):

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <namespace_MyModule>
            <version>0.1.0</version>
        </namespace_MyModule>
    </modules>
    <global>
        <events>
             <checkout_cart_product_add_after>
                   <observers>
                        <namespace_MyModule_Discount>
                           <class>MyModule/Observer</class>
                           <method>MyModulePriceChange</method>
                         </namespace_MyModule_Discount>
                    </observers>
              </checkout_cart_product_add_after>
         </events>
     </global>
</config>

这是我的模块的观察者(在app \ code \ local \ namespace \ MyModule \ Model中):

<?php
    class namespace_MyModule_Model_Observer
    {
        public function MyModulePriceChange(Varien_Event_Observer $obs)
        {
            // Get the quote item
            $item = $obs->getQuoteItem();
            // Ensure we have the parent item, if it has one
            $item = ( $item->getParentItem() ? $item->getParentItem() : $item );
            // Load the custom price
            $price = $this->_getPriceByItem($item);
            // Set the custom price
            $item->setCustomPrice($price);
            $item->setOriginalCustomPrice($price);
            // Enable super mode on the product.
            $item->getProduct()->setIsSuperMode(true);
        }

        protected function _getPriceByItem(Mage_Sales_Model_Quote_Item $item)
        {
            $price = 4;

            //use $item to determine your custom price.

            return $price;
        }

    }
?>

此外,是否可以调用soap客户端在观察者中使用Web服务?

我希望我的问题很清楚,谢谢你提前帮助。

2 个答案:

答案 0 :(得分:0)

我看到你的config.xml有些问题。首先,使用大写的公司名称和模块名称。 namespace_MyModule将成为您的命名空间。 您必须在全局部分下声明模型,如下所示:

<models>
    <mycompany_mymodule>
        <class>Mycompany_Mymodule_Model</class>
    </mycompany_mymodule>
</models>

这将告诉magento您希望将mycompany_mymodule用于模块中的模型,并且每个模块的类名将以Mycompany_Mymodule_Model开头。 Mycompany和Mymodule分别对应于模块的文件夹:app / code / local / Mycompany / Mymodule。

config.xml的modules部分也应该具有此命名空间(Mycompany_Mymodule),与app / code / local中的文件app / etc / modules和文件夹结构的名称相匹配。

观察者随后成为以下(我添加了类型,并更改了类):

<observers>
    <namespace_MyModule_Discount>
        <type>singleton</type>
        <class>mycompany_mymodule/Observer</class>
        <method>MyModulePriceChange</method>
    </namespace_MyModule_Discount>
</observers>

然后尝试通过添加一些代码来测试您的观察者方法,例如die("message")

答案 1 :(得分:0)

您尚未在config.xml文件中声明models标记。 毕竟观察者是一个模型,magento不知道在哪里找到它(你引用的MyModule / Observer)。下面是声明模型标记的示例:

<models>
   <MyModule>
      <class>Namespace_Modulename_Model</class> 
   </MyModule>
</models>

是的,您可以在观察者内部进行soap api调用。