magento order observer简单查询

时间:2014-10-21 07:09:42

标签: php magento

我想添加简单的订单观察器,我想在自定义数据库中输入很少的条目:

订单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;
    }
}

但我没有在数据库中插入任何记录

2 个答案:

答案 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。