【问题标题】:magento order observer simple querymagento 订单观察者简单查询
【发布时间】:2014-10-21 07:09:42
【问题描述】:

我想添加简单的订单观察者,我想在我的自定义数据库中添加一些条目:

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

观察者.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;
    }
}

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

【问题讨论】:

    标签: php magento


    【解决方案1】:

    据我了解,您尝试在创建新订单时在数据库中添加一些内容。好的,所以你尝试观察这个事件sales_order_save_after,而事件sales_order_save_after有点棘手。

    第一次触发时 Order 尚未提交给 DB,更重要的是 - 它实际上还没有设置 State 和 Status。但无论如何我们可以使用这个观察者,而你在你的观察者中使用了 RAW sql 查询,这并不好。您应该为此创建单独的模型。

    我只是在这里添加观察者,

    local/PackageName/ModuleName/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> 
    

    还有你的模特,(观察者) local/PackageName/ModuleName/Model/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 ....
                        }
    }
    

    最后定义你的模块池并启用,

    app/etc/modules/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>
    

    就是这样。如果您有任何疑问,请在此处发表评论..

    【讨论】:

    • sales_order_save_after 是否给出完整的订单,即正确的订单,我成功的订单?。
    • 是的,它会起作用的。在您的情况下,您可以使用它,此外它实际上没有订单状态。这就是我的意思。
    【解决方案2】:

    首先检查这部分sampleobserversales/order_save_after_observer,我的意思是你是否使用正确的模块名称sampleobserversales和那个路径。

    如果没问题,还是不行,尝试将sales_order_save_after重命名为sales_order_place_after

    更新:

    有时 CamelCase 会产生问题。尝试输入Sampleobserver 而不是SampleObserver,当然您应该更改SampleObserver 的位置以及文件名。创建类时应避免在 magento 中使用 CamelCase。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多