Magento – get all order list for logged in customer in magento

configurable-productmagento-1.8order-gridsales-order

I'm trying to generate the list of past ordered products for logged in customer. My attempt so far.

<ul>
<?php 
    $OrderProducts = Mage::getResourceModel('sales/order_collection')
                        ->addFieldToSelect('*')
                        ->addFieldToFilter('customer_id', Mage::getSingleton('customer/session')->getCustomer()->getId())
                        ->addFieldToFilter('state', array('in' => Mage::getSingleton('sales/order_config')->getVisibleOnFrontStates()))
                        ->setOrder('created_at', 'desc');       

                foreach($OrderProducts as $ord){            

                    $o=Mage::getModel('sales/order')->load($ord->getId());  
                    $items = $o->getAllItems(); ?>


                    <?php foreach($items as $p){
                          $p= Mage::getModel('catalog/product')->load($p->getId());
                          ?>                         
                        <li>
                         <a href="<?php echo $p->getProductUrl()?>"><img class="recently-img" src="<?php echo $this->helper('catalog/image')->init($p, 'small_image')->keepFrame(false) ->keepAspectRatio(true)->resize(140) ?>" /></a>
                       </li>        

          <?php }} ?>
</ul>

This code showing some past order items but some contents are wrong. And also it does not show those products which are configurable products. Please help. Thanks in advance.

Best Answer

I found a much more performance friendly version.

By joining the two tables order and order_items together, Magento returns a collection with all purchased items.

$items = Mage::getModel('sales/order')->getCollection()
    ->join(array('item' => 'sales/order_item'), 'main_table.entity_id = item.order_id')
    ->addFieldToFilter('customer_id', $customerId);
Related Topic