Yii Frameworkの醍醐味、
dataProviderでの便利すぎるsort機能のカスタマイズ方法をメモします。
CActiveDataProvider、CArrayDataProviderの両方で使える方法です。
dataProviderへのコントローラ側の設定
$dataProvider=new CArrayDataProvider($datas, array(
'pagination'=>array('pageSize'=>20),
'sort'=>array(
'defaultOrder'=>'regist_date desc ', // デフォルトの並び
'attributes'=>array( // 並び替えのキーを指定(日本語キー可能=>modelのattributesを無視したネーミング可能!)
'クラス'=>array(
'asc'=>'category_id ASC',
'desc'=>'category_id DESC',
),
'名前'=>array(
'asc'=>'name ASC',
'desc'=>'name DESC',
),
'性別'=>array(
'asc'=>'sex ASC',
'desc'=>'sex DESC',
),
),
),
));
CActiveDataProviderを使う場合は
$dataProvider=new CArrayDataProvider($datas, array(
'pagination'=>array('pageSize'=>20),
'sort'=>array(
'defaultOrder'=>'regist_date desc ', // デフォルトの並び
'attributes'=>array( // 並び替えのキーを指定(日本語キー可能=>modelのattributesを無視したネーミング可能!)
'flow'=>array(
'asc'=>'day ASC, place ASC, start_time ASC',
'desc'=>'day DESC, place DESC, start_time DESC',
),
'regist_time',
'start_time'=>array( // モデルのattributesの並び順のカスタム可能
'asc'=>'day ASC, start_time ASC',
'desc'=>'day DESC, start_time DESC',
),
'speech_type', // モデルのattributesも普通に可能 項目名は日本語に自動で変換されます
'place',
'place',
'length',
),
),
));
view側の設定は
$this->widget('zii.widgets.CListView', array(
'ajaxUpdate' => false,
'dataProvider' => $dataProvider,
'itemView' => '_table_view',
'template' => '{summary}{pager}{sorter}{items}',
'summaryCssClass' => 'table_summary',
'summaryText' => '{count}件中 {start}件から{end}件まで表示',
'pager' => array(
'cssFile' => false,
'htmlOptions' => array('class'=>'pagination'),
'firstPageLabel'=>'最初',
'lastPageLabel'=>'最後',
'nextPageLabel'=>'次へ',
'prevPageLabel'=>'前へ',
'selectedPageCssClass'=>'active',
'header' => '',
),
'sorterHeader'=>'並び順',
'sortableAttributes'=>array( // sort可能なキーをここで指定する
'flow',
'regist_time',
'start_time',
'speech_type',
'place',
'length',
),
));
一見複雑に見えますが慣れてしまえば抜け出せなくなるぐらいの便利さがあります。
Yii Framework すごいです。