1

我在下面有一个代码(简化),可以在客户帐户 -> 订单 -> 视图(订单详细信息)中为当前订单添加评论。

代码工作正常。唯一的问题是,在处理表单和调用发送的评论后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; ?>

有谁知道是什么原因,为什么最后添加的评论没有在其他评论中正确排序?

4

1 回答 1

1

这种奇怪排序的原因是,当您向订单的状态历史集合添加新的历史项目时,订单会加载现有集合(已排序)并将新项目添加到其末尾。

要正确输出集合,您可以重新加载 order 对象,这样历史集合将以正确的顺序获取:

<?php 
$orderNew = Mage::getModel('sales/order')->load($this->getOrder()->getId());
$_history = $orderNew->getVisibleStatusHistory() ?>
于 2013-01-30T13:29:57.817 回答