Magento:“我的帐户”下的客户没有订单历史记录 - 订单对象未正确传递

时间:2012-11-22 13:00:24

标签: php magento

我正在运行Magento Enterprise 1.9,并且客户未在“我的帐户”的“订单历史记录”部分中看到任何订单。我已经调试了很多,只是无法弄清楚发生了什么。奇怪的是,在我们的登台服务器上,它可以正常工作。

到目前为止我做了什么:

1)确保<visible_on_front/>适用于/app/code/core/Mage/Sales/etc/config.xml内的每个订单状态(因此它们都应该可见)。

2)app\code\core\Mage\Sales\Block\Order\History.php (view file source)从数据库中获取订单,并使用$this->setOrders($orders);为模板文件设置订单。我已调试此对象并输出原始SQL以获取此信息:

SELECT `main_table`.*
FROM   `sales_flat_order` AS `main_table`
WHERE  ( main_table.customer_id = '4' )
       AND ( state IN ( 'new', 'processing', 'complete', 'closed',
                        'canceled', 'holded', 'payment_review' ) )  

在登台服务器和实时服务器上为我的测试客户返回订单。

3)app\design\frontend\enterprise\astleyclarke\template\sales\order\history.phtml (view file source)是负责输出订单的相应模板文件。它使用$_orders = $this->getOrders();抓取订单并使用if($_orders->getSize()):进行检查。 此时出现问题。实时服务器上报告的大小为0,尽管它不在登台服务器上,尽管两台服务器在我手动运行SQL时报告数据库中的订单。

所以对我来说,似乎$ orders对象没有被实时服务器上的phtml文件正确传递或获取。

非常感谢任何其他想法或帮助。

2 个答案:

答案 0 :(得分:0)

订单集合在Mage_Sales_Block_Order_History::__construct初始化。

但该集合尚未加载。

您可以做什么调试,您可以在上面的函数中临时添加$orders->load(),然后检查_items对象的$order属性。是否列出了订单?

您可以提取(string) $order->getSelect()使用的选择。

如果在这种情况下获得订单,则可能会在块_construct和视图呈现之间操纵集合。

答案 1 :(得分:0)

我知道这是一个老问题,但我认为OP遇到了以下情况。 安装了一个扩展程序,重新定义了订单历史记录的模板phtml。 xml配置指向安装在base/default下的模板文件,但服务器使用名为enterprise/astleyclarke的主题,因此无法访问模板文件,在这种情况下将不会输出,也不会生成日志输出

在app-folder及更高版本的history.phtml之后搜索xml文件。有一个配置文件很可能指向活动主题下不存在的位置。

我最近遇到了同样的问题,在base/default/layout/chipmaster/reant.xml下安装的扩展程序xml有以下内容:

<template>chipmaster/reant/sales/order/history.phtml</template>

但是服务器正在使用主题xyz/default,并且配置中的历史文件隐藏在:

design/frontend/base/default/template/chipmaster/reant/sales/order/history.phtml

要使服务器再次打印历史记录,请将文件及其目录结构移动到主题中,或编辑xml文件。我做了之后和编辑之后

<template>sales/order/history.phtml</template>

这是默认位置,我们再次在前端订购了订单历史记录。