Ссылка в столбце в 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;'),
        ),
    ),
));

Контроллер сайта

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));
    }

У этого контроллера нет модели.


person Alex Malev    schedule 20.05.2014    source источник


Ответы (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, вы можете использовать необработанный тип для создания сортируемых ссылок, как показано ниже.

$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)'
            ),
person Manquer    schedule 20.05.2014
comment
Манкер, ничего не происходит! - person Alex Malev; 20.05.2014
comment
'sort' =› array( 'attributes' =› array( 'title', 'создан', 'category_id', 'subcategory_id', 'condition_id', ), - person Alex Malev; 20.05.2014
comment
Заголовок заголовка отображается не как ссылка, а просто как текст. И должна быть ссылка. - person Alex Malev; 20.05.2014
comment
вам также может потребоваться включить сортировку для самого столбца - person Manquer; 20.05.2014
comment
Я сделал это тот же результат, но ничего не произошло. - person Alex Malev; 20.05.2014
comment
мои извинения, только CDataColumn имеет сортируемое свойство, см. :yiiframework.com/doc/api /1.1/CDataColumn#sortable-detail, а не CLinkColumn - person Manquer; 20.05.2014
comment
Может это из-за того, что модели нет, а данные о том, что модель берется со страницы CGridview? - person Alex Malev; 20.05.2014
comment
ОК, а почему тогда не работают другие колонки? Они не CLinkColumn. - person Alex Malev; 20.05.2014
comment
попробуйте 'sortable'=›true в массиве заголовков. - person ramamoorthy_villi; 20.05.2014
comment
@AlexMalev вы должны сделать 'sortable'=›true для других массивов столбцов и использовать необработанный тип столбца для заголовка, как я уже упоминал в измененном ответе. - person Manquer; 20.05.2014
comment
Благодарю вас! Ссылки отображаются как Заголовки + ссылки, но сортировка по-прежнему не работает. - person Alex Malev; 20.05.2014
comment
можете ли вы сказать мне, что происходит, когда вы нажимаете ссылку в заголовке (т.е. запрашиваемый URL-адрес?) - person Manquer; 20.05.2014
comment
domain.com/site/index?Page_sort=title&ajax=yw0, если я нажму на заголовок, а данные в столбце не изменятся. - person Alex Malev; 20.05.2014
comment
это кажется правильным. не уверен, что происходит не так .. попробуйте проверить журналы sql и посмотреть, есть ли проблема с запросом - person Manquer; 20.05.2014
comment
Решение. $dataProvider=new CActiveDataProvider('Страница', array( 'criteria'=›$criteria, 'sort' =› array( 'defaultOrder'=›array( 'id'=›DESC )), 'pagination'=›array( 'pageSize'=›30, ), )); - person Alex Malev; 21.05.2014
comment
defaultOrder вернет отсортированный список при начальной загрузке в соответствии с настроенной вами логикой, это не решит проблему сортировки, с которой вы столкнулись. - person Manquer; 21.05.2014