你可以做到這一點,那麼你的訪客數可以成爲你的CGridView一個排序的列。
所以你的控制器可以看起來是正常的;
class VisitsController extends Controller
{
...
public function actionIndex()
{
$model=new Visits('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Visits']))
$model->attributes=$_GET['Visits'];
$this->render('index',array(
'model'=>$model,
));
}
...
}
在你的模型,你就需要聲明一個變量來保存計數的搜索,然後添加到這個搜索()方法,像這樣;
class Visits extends CActiveRecord
{
/**
* @var array Allows model filtering by visit count
*/
public $visit_count;
...
// Remember to declare it as safe
public function rules()
{
return array(
...
array(... ,'visit_count', ..., 'safe', 'on'=>'search'),
...
);
}
...
// Give it a label if you wish
public function attributeLabels()
{
return array(
...
'visit_count' => 'Visitors Counts',
...
);
}
...
// Now add to your search method
public function search()
{
$criteria=new CDbCriteria;
$visit_table = Visits::model()->tableName();
$visit_count_sql = "(select count(*) from `$visit_table` where `$visit_table`.`hostname` = `t`.`hostname`)";
$criteria->select = array(
'*',
$visit_count_sql . " as `visit_count`",
);
$criteria->compare($visit_count_sql, $this->visit_count);
// Set the CActiveDataProvider to order by the visitor count
$criteria->order = 'visit_count DESC';
...
// All your other criteria code
...
// And add to the CActiveDataProvider
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array(
'attributes'=>array(
'visit_count'=>array(
'asc'=>'visit_count',
'desc'=>'visit_count DESC',
),
'*',
),
),
'pagination'=>array(
'pageSize'=>100,
),
));
}
...
}
然後,您可以將此添加到您的視圖中的CGridView;
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'visit-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'hostname',
'visit_count',
array(
// Whatever your detail column looks like!
),
array(
'class'=>'CButtonColumn',
),
),
));
我沒有測試過,但我從我自己的項目的一個更復雜的模型剝離它,所以它可能需要一些編輯和變量名,將最有可能需要改變你的應用程序,但基本的流程就在那裏。
嗨Stu, 首先非常感謝你。我的問題是解決我在谷歌上搜索了4天,但仍然沒有找到任何解決方案。如果可以的話,謝謝 我只想使用自定義排序,我的意思是哪個主機名爲我們提供了足夠的訪問者,這個主機在CGridview中向上移動。可能需要一個自定義功能,但怎麼能,我無法解決這個問題。 '主機名遊客計數詳細 facbook.com 40點擊這裏 google.com 150點擊這裏 yahoo.com 90點擊這裏' – 2013-03-20 10:43:15
我想谷歌移動頂行,我怎麼能解決這個問題,我在很多請麻煩。 – 2013-03-20 10:50:34
與上面它應該自動按'visit_count DESC'命令?您還應該能夠點擊訪問計數列標題以按該列進行排序? – Stu 2013-03-20 11:13:43