I am new to magento.I am trying to create a view for the purchase history for users.Already there is a page to display this(As I am using a template).But as a experiment I tried to create a new page with the same content.As my first step. I created a new php block and then I copied same the content from the old purchase history file to the new one(Without any change).Then I called that block in a cms page.But when I called the url of the new page,It gives this error

Fatal error: Call to a member function getSize() on null in /home/bvbellpm/public_html/newtrades/app/design/frontend/base/default/template/customer/form/purchasehistory.phtml on line

This is the code which I used to display the history

<?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
<?php $_orders = $this->getOrders(); ?>
<div class="page-title">
    <h1><?php echo $this->__('My Orders') ?></h1>
<?php echo $this->getPagerHtml(); ?>
<?php if($_orders->getSize()>0): ?>
<table class="data-table" id="my-orders-table">
            <th><?php echo $this->__('Order #') ?></th>
            <th><?php echo $this->__('Date') ?></th>
            <th><?php echo $this->__('Ship To') ?></th>
            <th><span class="nobr"><?php echo $this->__('Order Total') ?></span></th>
            <th><span class="nobr"><?php echo $this->__('Order Status') ?></span></th>
        <?php $_odd = ''; ?>
        <?php foreach ($_orders as $_order): ?>
            <td><?php echo $_order->getRealOrderId() ?></td>
            <td><span class="nobr"><?php echo $this->formatDate($_order->getCreatedAtStoreDate()) ?></span></td>
            <td><?php echo $_order->getShippingAddress() ? $this->htmlEscape($_order->getShippingAddress()->getName()) : '&nbsp;' ?></td>
            <td><?php echo $_order->formatPrice($_order->getGrandTotal()) ?></td>
            <td><em><?php echo $_order->getStatusLabel() ?></em></td>
            <td class="a-center">
                <span class="nobr"><a href="<?php echo $this->getViewUrl($_order) ?>"><?php echo $this->__('View Order') ?></a>
                    <?php /*<span class="separator">|</span><a href="<?php echo $this->getTrackUrl($_order) ?>"><?php echo $this->__('Track Order') ?></a>&nbsp;*/ ?>
                    <?php if ($this->helper('sales/reorder')->canReorder($_order)) : ?>
                    <span class="separator">|</span> <a href="<?php echo $this->getReorderUrl($_order) ?>" class="link-reorder"><?php echo $this->__('Reorder') ?></a>
                <?php endif ?>
        <?php endforeach; ?>

But this same code works fine in the old purchase history file.Why is this not working in the new page? .I think $this->getOrders() is returning a null object.But it is working fine in the old page.As far as I know $this->getOrders() is a magic method in Magento.So I think it can be used any where.Can someone explain me the reason for this odd behavior?

  • 1
    please add your layout and block file – Piyush Jan 18 '18 at 4:57
  • Hello try this<?php if (sizeof($_orders->getItems()) > 0): ?> – Birjitsinh Zala Jan 18 '18 at 5:37
  • Birjitsinh Zala I tried it.But still it gives the error – sadeee nadeee Jan 18 '18 at 6:20
  • Is there any thing I have to do in order to use getItems() method?.Do I need to define it in a xml file.Can someone guide me on this? – sadeee nadeee Jan 18 '18 at 6:32

As you told us that you are new I would like to tell you about block and template mapping

Every template assign to a block so in template (phtml) file $this represent block class

so in your block class should have to contain that method getOrders other wise you will not get the data

You can look at this blog and learn how you bind blocks with template via layout http://excellencemagentoblog.com/blog/2011/09/22/magento-part2-series-layouts/

| improve this answer | |
  • K thanks for your support.I very much appreciate it – sadeee nadeee Jan 18 '18 at 6:50
  • In the cms page I have coded like this. {{block type="core/template" template="customer/form/purchasehistory.phtml"}} Is it okay? – sadeee nadeee Jan 18 '18 at 8:36
  • @sadeeenadeee, no In core/template block you dont have 'getOrders' method – Murtuza Zabuawala Jan 18 '18 at 8:49
  • So ,how are we going to know which block is having that method?. Can you tell me the folder path where core/template is referring to? – sadeee nadeee Jan 18 '18 at 8:59

Use this code

<?php if ($_orders && count($_orders)) : ?> 

Instea of this code`

<?php if($_orders->getSize()>0): ?>`
| improve this answer | |
  • I tried it ,but it did't fix the issue – sadeee nadeee Jan 18 '18 at 6:21
  • <?php if ($_orders && count($_orders)) : ?> – Birjitsinh Zala Jan 18 '18 at 6:42
  • Still it gives that error – sadeee nadeee Jan 18 '18 at 8:37
  • need to check php of your block where you get collecton – Birjitsinh Zala Jan 18 '18 at 8:42

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.