Hawiak
Hawiak

Reputation: 553

Get custom attribute of products from observer order object Magento

I am trying to get a custom attribute in from a product in an observer. I have the following:

public function export_new_order($observer){
    $orderIds = $observer->getData('order_ids');
    foreach($orderIds as $_orderId){
        $order     = Mage::getModel('sales/order')->load($_orderId);
        Mage::log($order->debug());
    }
}

Which works fine, I get a nice print_r in my log.
However, when I try to get items it doesn't work.

I tried this:

public function export_new_order($observer){
    $orderIds = $observer->getData('order_ids');
    foreach($orderIds as $_orderId){
        $order     = Mage::getModel('sales/order')->load($_orderId);
        Mage::log($order->debug());
        $items = $order->getAllItems();
        Mage::log($items->debug());
    }
}

Also this:

$items = $order->getAllVisibleItems();
Mage::log($items->debug());

But none of those work, i get a white screen whenever I click "Place order"

<?xml version="1.0"?>
<config>
<modules>
    <Feed_Sales>
        <version>0.0.1</version>
    </Feed_Sales>
</modules>
<global>
    <models>
        <feedsales>
            <class>Feed_Sales_Model_Order_Observer</class>
        </feedsales>
    </models>
    <events>
        <checkout_onepage_controller_success_action>
            <observers>
                <feed_sales_model_order_observer>
                    <type>singleton</type>
                    <class>Feed_Sales_Model_Order_Observer</class>
                    <method>export_new_order</method>
                </feed_sales_model_order_observer>
            </observers>
        </checkout_onepage_controller_success_action>
    </events>
</global>

Upvotes: 1

Views: 1294

Answers (3)

Amit Bera
Amit Bera

Reputation: 7611

There are issue with paramter fetch.

For getting order id try this

 $orderIds = $observer->getEvent()->getOrderIds();

you need change model prefix class name:

to:

<class>Feed_Sales_Model</class>

From:

 <class>Feed_Sales_Model_Order_Observer</class>

And

From:

 <class>Feed_Sales_Model_Order_Observer</class> 

to

 <class>feedsales/order_observer</class>

file location should be app/code/YOurMOduleCodePool/Feed/Sales/Model/Order/Observer.php

Upvotes: 0

Alexei Yerofeyev
Alexei Yerofeyev

Reputation: 2103

I believe, you're getting the items just fine, the problem is somewhere else. Collections don't have debug method, so if you look into your server logs, most likely you will find an error about that.

So if you want to debug the items, you should do something like this:

public function export_new_order($observer){
    $orderIds = $observer->getData('order_ids');
    foreach($orderIds as $_orderId){
        $order     = Mage::getModel('sales/order')->load($_orderId);
        Mage::log($order->debug());
        $items = $order->getAllItems();
        foreach ($items as $item) {
            Mage::log($item->debug());
        }
    }
}

Upvotes: 1

Try to get order as follows and then get items for that order

$order = new Mage_Sales_Model_Order();
$incrementId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
$order->loadByIncrementId($incrementId);

This is shown in following link.

Magento: Obtain Id for order, listening to the event checkout_onepage_controller_success_action

Upvotes: 0

Related Questions