Skip to content

Instantly share code, notes, and snippets.

@greenpeas
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save greenpeas/8952720 to your computer and use it in GitHub Desktop.
Save greenpeas/8952720 to your computer and use it in GitHub Desktop.
CSqlDataProvider with sort and pagination
<?php
$sql = "SELECT
`p`.`id`,
getFIOWithInic(`p`.`id`,0) AS `fio`,
`p`.`number` AS `tabel`,
`rpt`.`name_short` AS `type_name`,
`rpc`.`name` AS `cat_name`,
DATE_FORMAT(`p`.`date_start_work`,'%d.%m.%Y') AS `date_start_work`,
`p`.`is_deleted`,
DATE_FORMAT(MAX(`wm`.`date_start`),'%d.%m.%Y') AS `wm_date_start`,
`rwm`.`name` AS `work_mode`
FROM `personal` AS `p`
LEFT JOIN `ref_personal_type` AS `rpt` ON `rpt`.`id` = `p`.`id_type`
LEFT JOIN `ref_personal_category` AS `rpc` ON `rpc`.`id` = `p`.`id_category`
LEFT JOIN `mm_personal_workmode` AS `wm` ON `wm`.`id_personal` = `p`.`id`
LEFT JOIN `ref_work_mode` AS `rwm` ON `rwm`.`id` = `wm`.`id_workmode`
WHERE (`p`.`sname` LIKE '%" . $q . "%' OR `p`.`number` LIKE '%" . $q . "%') AND (`p`.`is_deleted` != 1)
GROUP BY `p`.`id`
";
$count = Yii::app()->db->createCommand(
"SELECT COUNT(*)
FROM `personal` AS `p`
WHERE (`p`.`sname` LIKE '%" . $q . "%' OR `p`.`number` LIKE '%" . $q . "%')
AND (`p`.`is_deleted` != 1)"
)->queryScalar();
$dataProvider = new CSqlDataProvider($sql, array(
'totalItemCount' => $count,
'sort' => array(
'attributes' => array(
'fio','tabel','type_name','cat_name' // по каким полям сортировка
),
'defaultOrder'=>array(
'fio'=>CSort::SORT_ASC, // Поле по умолчанию
),
),
'pagination' => array(
'pageSize' => AppSettingsMain::model()->findByAttributes(array('name' => 'pagination'))->value,
),
));
///////// View //////////////////////////////////////////////////////////////////
$this->widget('bootstrap.widgets.TbGridView', array(
'dataProvider' => $dataProvider,
'columns' => array(
array(
'header' => '№ П/П',
'value' => '$this->grid->dataProvider->pagination->currentPage * $this->grid->dataProvider->pagination->pageSize + ($row+1)',
),
array(
'header' => 'Табельный №',
'name' => 'tabel',
),
array(
'header' => 'ФИО',
'name' => 'fio',
),
array(
'header' => 'Тип',
'type'=>'raw',
'name' => 'type_name',
),
array(
'header' => 'Категория',
'name' => 'cat_name',
),
array(
'type'=>'raw',
'header' => 'Текущий режим работы',
'value' => '"С ".$data["wm_date_start"].": <b>".$data["work_mode"]."</b>";',
),
array(
'header' => 'Действия',
'type' => 'raw',
'value' => function($data) {
$buttons = '
<div class="hidden-phone visible-desktop action-buttons">
<a class="green" href="'.Yii::app()->homeUrl.'tables/personal/view/id/' . $data['id'] . '" data-rel="tooltip" title="Просмотр записи">
<i class="icon-search bigger-130"></i>
</a>';
if(Roles::check(array('admin')))$buttons .= '
<a class="green" href="'.Yii::app()->homeUrl.'tables/personal/update/id/' . $data['id'] . '" data-rel="tooltip" title="Редактирование записи">
<i class="icon-pencil bigger-130"></i>
</a>
<a class="red" onClick="return confirm(\'Подтвердите удаление!\');" href="'.Yii::app()->homeUrl.'tables/personal/delete/id/' . $data['id'] . '" data-rel="tooltip" title="Удаление записи">
<i class="icon-trash bigger-130"></i>
</a>';
$buttons .= '</div>';
return $buttons;
},
),
),
)
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment