0

メッセージとその発行日を含む SQL テーブルがあります。

これらのメッセージを M1、M2、... M99 と呼びましょう。M1 が最新のメッセージです。

whatsapp の方法でそれらを表示したい (私は Yii 1.1 フレームワークを使用しています): 最新のメッセージ M1 は一番下にあり、その上には 2 番目に新しい M2 メッセージなどがあります。

しかし、固定数のメッセージ (5 としましょう) のブロックごとに表示したいので、要求があれば前のメッセージをロードします。したがって、ページをロードすると、次のように表示されます。

(さらに読み込むボタン)

M5

M4

M3

M2

M1

[さらに読み込む] ボタンを 1 回クリックすると、上から下に次のようになります。

(さらにボタンをロード)/M10/M9/M8/M7/M6/M5/M4/M3/M2/M1

Yii で ActiveDataProvider を使用してこれを達成しようとしていますが、そのためには、次のようにデータを並べ替える必要があります。

M5、M4、M3、M2、M1、M10、M9、M8、M7、M6、M15、M14、M13、M12、M11など

limit と offset を使用しても、そのような並べ替えを行う方法がわかりません。

誰かがこれについて私を助けてくれたら嬉しいです、ありがとう!

編集:これが私が使用しているActiveDataProviderです

public function getMessagesDataProvider()
{
    $dataProvider = new CActiveDataProvider(Message::model(), array(
        'criteria' => array(
            'condition' => 't.inquiry_thread_id = :threadId',
            'params' => array(':threadId' => $this->id),
            'order' => 't.created_at DESC',
        ),
        'pagination' => array('pageSize' => 5, 'pageVar' => 'page'),
    ));
    $dataProvider->getData();
}

そして私の見解では

<?php $this->widget('\common\widgets\ListView', array(
    'dataProvider' => $messagesDataProvider,
    'pager' => array(
        'class' => '\common\widgets\LoadMorePager',
        'canBeReloadedByAjax' => true,
    ),
    'template' => '{pager}{items}',
    'itemView' => '/message/_messageItem',
    'itemsCssClass' => 'pager-container',
    'pagerCssClass' => 'inquiry-message-button',
)); ?>
4

1 に答える 1

1

とを使用setData()getData()て、データ プロバイダー内のアイテムの順序を逆にすることができます。

$dataProvider->setData(array_reverse($dataProvider->getData()));

$dataProvider->getData()ページ項目を逆順で返します。

于 2018-09-24T17:45:17.557 に答える