Ссылка в столбце в 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)'
            ),
Другие вопросы по тегам