0

我有一个包含消息及其发布日期的 SQL 表。

我们将这些消息称为 M1、M2、... M99。M1 是最新消息。

我想以 whatsapp 的方式显示它们(我正在使用 Yii 1.1 框架):最新消息 M1 位于底部,其上方是第二条最新的 M2 消息,依此类推。

但我想按固定数量的消息块(比如说 5 个)显示它们,如果需要,我将加载上一条消息。因此,在加载页面时,您应该看到:

(加载更多按钮)

M5

M4

M3

M2

M1

当单击一次加载更多按钮时,我会从上到下:

(加载更多按钮)/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等

我不确定如何实现这种排序,即使使用限制和偏移。

如果有人可以帮助我,我会很高兴,谢谢!

编辑:这是我正在使用的 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()andgetData()来反转数据提供者中项目的顺序:

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

$dataProvider->getData()将以相反的顺序返回页面项目。

于 2018-09-24T17:45:17.557 回答