我尝试使用来自网络服务的值创建动态产品折扣。
我已经在互联网上搜索了一些关于此事的指南,我发现我需要使用checkout_cart_product_add_after
和checkout_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服务?
我希望我的问题很清楚,谢谢你提前帮助。
答案 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调用。