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.