Ссылка в столбце в CGridView
У меня есть 2 проблемы в моем коде: 1) Вы не можете выполнить сортировку по заголовку "Заголовок" при нажатии на него. 2) Можно нажать на заголовок, подумать, что будет сортировка по алфавиту, появится стрелка, но ничего не происходит, сортировки нет.
сайт / index.php
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dataProvider,
'columns' => array(
'title' => array(
'class'=>'CLinkColumn',
'labelExpression' => '$data->title',
'urlExpression'=>'Yii::app()->request->baseUrl."/page/".$data->id',
'header'=>'Title',
'headerHtmlOptions' => array('style'=>'width:250px;'),
),
'created' => array(
'name' => 'created',
'value' => 'date("j.m.Y H:i", $data->created)',
'headerHtmlOptions' => array('style'=>'width:90px;'),
),
'category_id' => array(
'name' => 'category_id',
'value' => '$data->category->title',
'filter' => Category::allCategory(),
'headerHtmlOptions' => array('style'=>'width:150px; text-align:center;'),
),
'subcategory_id' => array(
'name' => 'subcategory_id',
'value' => '$data->subcategory->title',
'filter' => Subcategory::allCategory(),
'headerHtmlOptions' => array('style'=>'width:150px; text-align: center;'),
),
'condition_id' => array(
'name' => 'condition_id',
'value'=> '$data->condition->title',
'filter' => Condition::allAttributes(),
'headerHtmlOptions' => array('style'=>'width:90px;'),
),
),
));
SiteController
public function actionIndex()
{
$dataProvider=new CActiveDataProvider('Page', array(
'criteria'=>array(
'order'=>'id DESC',
),
'pagination'=>array(
'pageSize'=>30,
),
));
// renders the view file 'protected/views/site/index.php'
// using the default layout 'protected/views/layouts/main.php'
$this->render('index', array('dataProvider'=>$dataProvider));
}
Этот контроллер не имеет модели.
1 ответ
Решение
Измените ваш dataProvider чем-то вроде этого
$dataProvider=new CActiveDataProvider('Page', array(
'criteria'=>array(
'order'=>'id DESC',
),
'sort' => array(
'attributes' => array(
'title',
),
),
'pagination'=>array(
'pageSize'=>30,
),
));
CLinkColumn не поддерживает сортировку, только CDataColumn видит CDataColumn и CLinkColumn, вместо этого можно использовать тип Raw для создания сортируемых ссылок, как показано ниже
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' => $dataProvider,
'enableSorting'=>true,
'columns' => array(
'title' => array(
'name'=>'title',
'headerHtmlOptions' => array('style'=>'width:250px;'),
'type'=>'raw',
'value'=>'CHtml::link($data->title,Yii::app()->request->baseUrl."/page/".$data->id)'
),