Yii: Расширение alphapager для вывода навигации по первым буквам (на примере для CGridView)

Yii: Расширение alphapager для вывода навигации по первым буквам (на примере для CGridView) Добавляем фильтрацию по первым буквам какого-либо поля в виджете CGridView.

Используем расширение Alphapager — http://www.yiiframework.com/extension/alphapager/.

Скачиваем и разархивируем его в папку extensions.

Для русских букв изменим функцию в этом расширении (не сообразил как это внедрить, не меняя файлы расширения):

/**
* @return Pager character set array. Default is A-Z.
*/
public function getCharSet()
{
if($this->_charSet===null) {
$charSet1 = range('A','Z');
$charSet2 = array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я');
$this->_charSet = array_merge($charSet1,$charSet2);
}
return $this->_charSet;
}  

В модели надо поправить метод search.

public function search()
{
Yii::import('application.extensions.alphapager.ApActiveDataProvider');

$criteria=new CDbCriteria;

$criteria->compare('id',$this->id);
$criteria->compare('category_id',$this->category_id);
$criteria->compare('email',$this->email,true);
$criteria->compare('name',$this->name,true);
$criteria->compare('surname',$this->surname,true);
...

// This is just for disabling buttons which have no results
       $acCriteria=new CDbCriteria;   
       $acCriteria->select='DISTINCT(SUBSTR(`name`,1,1)) AS `name`'; 
       $chars = $this->findAll($acCriteria);
       foreach($chars as $char)
           $activeChars[]=mb_strtoupper($char->name); // поднимать регистр обязательно, иначе отобразит неактивной букву, на которую есть имена

return new ApActiveDataProvider(get_class($this), array(
'criteria'=>$criteria,
            'sort'=>array(
                'defaultOrder'=>'id DESC',
            ),
            'pagination'=>array(
                'pageSize'=>(int)Yii::app()->session['mailerbasePageCount'] ? Yii::app()->session['mailerbasePageCount'] : 10,
            ), 
'alphapagination'=>array(
              'attribute'=>'name',
'activeCharSet'=>$activeChars,
            ), 
));
}  

и потом в виде admin.php соответствующего контроллера вместо вызова CGridView теперь надо вызывать расширенный от него виджет ApGridView:

<?php /*$this->widget('zii.widgets.grid.CGridView', array(*/
$this->widget('application.extensions.alphapager.ApGridView', array(
'template'=>"{summary}\n{alphapager}\n{pager}\n{items}", 
'alphaPager'=>array(
                       'showNumPage'=>'true',
               'header'=>'Имена на букву: ' //  <=====Setting different header text
       ),
'id'=>'mailerbase-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
...

Выглядит так:

Yii alphapager русский язык

 

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.