为什么$ this-> getOrders方法总是在此代码中返回一个空对象Magento

时间:2018-01-16 11:28:10

标签: php magento magento-1.9 magento-1.8

我是magento的新手。我正在尝试为用户创建购买历史记录。已经有一个页面可以显示这个(因为我正在使用模板)。但作为一个实验,我试图创建一个新的具有相同内容的页面。作为我的第一步。我创建了一个新的php块,然后我将旧购买历史文件中的内容复制到新的(没有任何更改)。然后我在cms页面中调用了该块。但是当我打电话时新页面的网址,它给出了这个错误

  

致命错误:在null中调用成员函数getSize()   /home/bvbellpm/public_html/newtrades/app/design/frontend/base/default/template/customer/form/purchasehistory.phtml   在线

这是我用来显示历史记录的代码

<?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>

但是这个相同的代码在旧的购买历史文件中工作正常。为什么这在新页面中不起作用?我认为 $ this-&gt; getOrders()正在返回一个null对象。但它在旧页面中工作正常。据我所知 $ this-&gt; getOrders() 是Magento的神奇方法。所以我认为它可以在任何地方使用。有人可以解释我这种奇怪行为的原因吗?

1 个答案:

答案 0 :(得分:0)

您需要在template.xml中使用相同的块声明新页面(我的意思是逻辑而不是模板)。您最有可能将此模板链接到sales/order_history类型的块。

您可以查看app/design/frontend/base/default/layout/sales.xml作为示例。

我们的想法是在模板的逻辑中使用函数getOrders。如果您调用普通块(例如核心/模板)以便能够调用它。否则,getOrders会尝试检索块的变量顺序。