我想添加简单的订单观察器,我想在自定义数据库中输入很少的条目:
订单ID,所有产品ID和用户来自的引荐来源(某些ID),
我在哪里写这个观察者,..以及我应该使用什么观察者,
代码:
config.xml中
<?xml version="1.0"?>
<config>
<global>
<models>
<sampleobserversales>
<class>SampleObserver_Sales_Model</class>
</sampleobserversales>
</models>
<events>
<sales_order_save_after>
<observers>
<sampleobserver_sales_order_save_after_observer>
<type>singleton</type>
<class>sampleobserversales/order_save_after_observer</class>
<method>activate</method>
</sampleobserver_sales_order_save_after_observer>
</observers>
</sales_order_save_after>
</events>
</global>
</config>
Observer.php
class SampleObserver_Sales_Model_Order_Save_After_Observer
{
public function __construct()
{
}
/**
* Applies the special price percentage discount
* @param Varien_Event_Observer $observer
* @return FlexNewz_Sales_Order_Invoice_Pay_Observer
*/
public function activate($observer)
{
$event = $observer->getEvent();
$sqlqury ="INSERT INTO `aaa` (`oid`) VALUES ('1')";
$connection = Mage::getSingleton('core/resource')->getConnection('core_write');
$connection->query($sqlqury);
//return $this;
}
}
但我没有在数据库中插入任何记录
答案 0 :(得分:1)
据我了解,您在创建新订单时尝试在数据库中添加内容。好的,所以你试图观察这个事件sales_order_save_after
,事件sales_order_save_after
有点棘手。
它第一次触发订单尚未提交给DB,更多的是 - 它实际上还没有设置状态和状态。但无论如何我们可以使用这个观察者,你在你的观察者中使用RAW sql查询并不好。您应该为此创建单独的模型。
我只是在这里添加观察者,
本地/包/模块名的/ etc / config.xml中强>
<?xml version="1.0"?>
<config>
<modules>
<PackageName_ModuleName>
<version>0.1.0</version>
</PackageName_ModuleName>
</modules>
<global>
<helpers>
<modulename>
<class>PackageName_ModuleName_Helper</class>
</modulename>
</helpers>
<models>
<modulename>
<class>PackageName_ModuleName_Model</class>
<resourceModel>modulename_mysql4</resourceModel>
</modulename>
</models>
<events>
<sales_order_save_after> <!-- identifier of the event we want to catch -->
<observers>
<sales_order_save_after_handler> <!-- identifier of the event handler -->
<type>model</type> <!-- class method call type; valid are model, object and singleton -->
<class>modulename/observer</class> <!-- observers class alias -->
<method>mycustom</method> <!-- observer's method to be called -->
<args></args> <!-- additional arguments passed to observer -->
</sales_order_save_after_handler>
</observers>
</sales_order_save_after>
</events>
</global>
</config>
你的模特,(观察者) 本地/包/模块名/型号/ Observer.php 强>
<?php
class PackageName_ModuleName_Model_Observer
{
public function mycustom(Varien_Event_Observer $observer)
{
//Mage::dispatchEvent('admin_session_user_login_success', array('user'=>$user));
//$user = $observer->getEvent()->getUser();
//$user->doSomething();
// Your custom stuff here goes ....
}
}
最后定义模块池并启用
应用的/ etc /模块/ PackageName_ModuleName.xml 强>
<?xml version="1.0"?>
<config>
<modules>
<PackageName_ModuleName>
<active>true</active>
<codePool>local</codePool>
<version>0.1.0</version>
</PackageName_ModuleName>
</modules>
</config>
那就是它。如果您有任何疑问,请在此处发表评论..
答案 1 :(得分:0)
首先检查此部分sampleobserversales/order_save_after_observer
,我的意思是您是否使用了正确的模块名称sampleobserversales
和该路径。
如果没问题,但仍无效,请尝试将sales_order_save_after
重命名为sales_order_place_after
<强>更新强>
有时候CamelCase会出问题。尝试代替SampleObserver
键入Sampleobserver
,当然您应该更改SampleObserver
的所有位置以及文件名。创建类时,应该避免使用mangeo中的CamelCase。