0

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>
</div>
<?php echo $this->getPagerHtml(); ?>
<?php if($_orders->getSize()>0): ?>
<table class="data-table" id="my-orders-table">
    <thead>
        <tr>
            <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>
            <th>&nbsp;</th>
        </tr>
    </thead>
    <tbody>
        <?php $_odd = ''; ?>
        <?php foreach ($_orders as $_order): ?>
        <tr>
            <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 ?>
                </span>
            </td>
        </tr>
        <?php endforeach; ?>
    </tbody>
</table>

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?

4
  • 1
    please add your layout and block file
    – Piyush
    Jan 18, 2018 at 4:57
  • Hello try this<?php if (sizeof($_orders->getItems()) > 0): ?> Jan 18, 2018 at 5:37
  • Birjitsinh Zala I tried it.But still it gives the error Jan 18, 2018 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? Jan 18, 2018 at 6:32

2 Answers 2

1

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/

4
  • K thanks for your support.I very much appreciate it Jan 18, 2018 at 6:50
  • In the cms page I have coded like this. {{block type="core/template" template="customer/form/purchasehistory.phtml"}} Is it okay? Jan 18, 2018 at 8:36
  • @sadeeenadeee, no In core/template block you dont have 'getOrders' method Jan 18, 2018 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? Jan 18, 2018 at 8:59
0

Use this code

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

Instea of this code`

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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