我在下面(简化)有一个代码,可以在客户的帐户中为当前订单添加评论 - >订单 - >查看(订单明细)。
代码运行正常。唯一的事情是,在处理表单发送的注释并调用getVisibleStatusHistory()
之后,除了客户最近添加的注释之外,所有注释都按日期/时间(降序)正确排序。该注释被添加为结果中的最后一个 - 这与getVisibleStatusHistory()
结果的降序排序不对应。重新加载页面后,它已正确排序。
所有代码都在自定义view.phtml
中我有一个表单发送评论:
<form action="" method="post">
<textarea name="ordercomment" maxlength="1000"></textarea>
<input type="submit" value="Send" />
</form>
它也由view.phtml处理:
$ordcomment = $_POST['ordercomment'];
$_order->addStatusHistoryComment($ordcomment)->setIsVisibleOnFront(1);
$_order->save();
并在该脚本之后打印所有可见的注释:
<?php $_history = $this->getOrder()->getVisibleStatusHistory() ?>
<?php if (count($_history)): ?>
<div class="order-additional order-comments">
<h2 class="sub-title"><?php echo $this->__('About Your Order') ?></h2>
<dl class="order-about">
<?php foreach ($_history as $_historyItem): ?>
<dt><?php echo $this->formatDate($_historyItem->getCreatedAtStoreDate(), 'medium', true) ?></dt>
<dd><?php echo $this->escapeHtml($_historyItem->getComment()) ?></dd>
<?php endforeach; ?>
</dl>
</div>
<?php endif; ?>
有谁知道是什么原因,为什么最后添加的评论在其他评论中没有正确排序?
答案 0 :(得分:1)
这种奇怪排序的原因是,当您将新的历史记录项添加到订单的状态历史记录集合时,该订单会加载现有的集合(已排序)并将新项目添加到其结尾。
要正确输出集合,您可以重新加载订单对象,然后以正确的顺序获取历史记录集合:
<?php
$orderNew = Mage::getModel('sales/order')->load($this->getOrder()->getId());
$_history = $orderNew->getVisibleStatusHistory() ?>