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

この奇妙な並べ替えの理由は、注文のステータス履歴コレクションに新しい履歴アイテムを追加すると、注文が既存のコレクション (並べ替え済み) をロードし、新しいアイテムを最後に追加するためです。

コレクションを正しく出力するには、順序オブジェクトをリロードすると、履歴コレクションが適切な順序でフェッチされます。

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