В поведение передается имя поля для сортировки, в CGridView добавляется колонка специального класса, в контроллер добавляется одно действие - класс. Работает на Ajax. Есть возможность устанавливать поле-категорию, для ситуаций, когда записи раскинуты по категориям. Получается что то вроде этого:
Планирую добавить установщик, который добавит колонку в таблицу в бд и заполнит ее. Еще по идее связи можно брать автоматически из relations().
Так же есть код на ci для перемещения записи в начало или конец, но не уверен что это нужно.
UPD
Добавил архив с файлами расширения.
Пример установки:
Распаковываем в папку protected/extensions
Контроллер:
Код: Выделить всё
public function actions()
{
return array(
'move'=>'ext.SSortableBehavior.SSortableAction',
);
}
Код: Выделить всё
public function behaviors()
{
return array(
'SSortableBehavior' => array(
'class' => 'ext.SSortableBehavior.SSortableBehavior',
),
);
}
Код: Выделить всё
public $sortField = 'sort_order';
public $categoryField = 'category_id';
Отображение(нужно добавить колонку):
Код: Выделить всё
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'product-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'name'=>'sort_order',
'filter'=>false
),
array(
'class'=>'ext.SSortableBehavior.SSortableColumn',
),
),
));