我使用Yii的Dataprovider基於列「points」輸出一羣用戶;Yii DataProvider更改每個結果中列的屬性
它現在工作正常,但我必須添加一個功能,所以如果用戶在線,他會得到額外的300分。
說傑克有100分,里士滿有300分,但傑克在線,傑克應該比里士滿高。
這裏是我現在的解決辦法:
$user=new Rank('search');
$user->unsetAttributes();
$user->category_id = $cid;
$dataProvider = $user->search();
$iterator = new CDataProviderIterator($dataProvider);
foreach($iterator as $data) {
//check if online ,update points
}
然而,這似乎CDataProviderIterator直接改變我的分頁到最後一頁,我甚至不能再切換頁面。我該怎麼辦?
非常感謝!
這裏是列表視圖:
$this->widget('zii.widgets.CListView', array(
'id'=>'userslist',
'dataProvider'=>$dataProvider,
'itemView'=>'_find',
'ajaxUpdate'=>false,
'template'=>'{items}<div class="clear"></div><div style="margin-right:10px;"><br /><br />{pager}</div>',
'pagerCssClass'=>'right',
'sortableAttributes'=>array(
// 'create_time'=>'Time',
),
));
在Rank.php模型
$criteria->with = array('user');
$criteria->select = '*, (IF(user.lastaction > CURRENT_TIMESTAMP() - 1800, points+300, points)) as real_points';
$criteria->order = 'real_points DESC';
然而更新的代碼,它拋出我的錯誤:
Active record "Rank" is trying to select an invalid column "(IF(user.lastaction > CURRENT_TIMESTAMP() - 1800". Note, the column must exist in the table or be an expression with alias.
您是否在此代碼之後使用CGridView或其他東西?我不相信你從迭代器對'$ data'所做的更改會影響你發送到網格或列表視圖的實際'$ dataProvider'。 – Pitchinnate
@Pitchinnate你好我正在使用CListView。 – jackhao
@Pitchinnate它們實際上只是將我的頁面定位到最後一頁,我根本無法更改頁面。 – jackhao