Есть дефолтный метод index в контроллере. Во вьюхе выводятся записи с пагинацией, она работает хорошо, претензий нет. Так же вверху выводимых записей имеется поисковый фильтр и в нем задействован ajaxSubmitButton. После нажатия на кнопку искать, все данные хорошо фильтруются. Но пагинатор уже не робит. Т.е. он как оставался на своем месте так и остается, а я так полагаю если данные отфильтрованы, пагинатор должен работать уже с отфильтрованными данными а не остатками из метода index.
Вопрос: При аякс запросе нужно ли передавать какие-то параметры, чтобы пагинатор после аякс запроса работал в соответствии с отфильтрованными данными или же нужно как-то по другому реализовывать этот механизм? Как это сделать? Заранее, спасибо
Код: Выделить всё
//дефолт
public function actionIndex()
{
//$allAnket = Anket::model()->with(['region', 'city'])->findAllByAttributes(array('ban'=>!1));
// создаем экземпляр класса CDbCriteria
$criteria = new CDbCriteria;
$count = Anket::model()->count($criteria);
$pages = new CPagination($count);
$pages->pageSize = 1;
$pages->applyLimit($criteria);
$criteria->addColumnCondition(['ban'=>!1]);
$criteria->order = 'id DESC';
$allAnket = Anket::model()->findAll($criteria);
$this->render('index', array('allAnket'=>$allAnket, 'pages'=>$pages));
}
//аякс
Код: Выделить всё
//получение результатов поиска по ajax
public function actionSearchResult()
{
if(Yii::app()->request->isAjaxRequest){
//условие по дефолту, когда заполнены все поля фильтра
$allAnket = Anket::model()->with(['region', 'city'])->findAllByAttributes( [ 'ban'=>!1, 'region_id'=>$_POST['region'], 'city_id'=>$_POST['city'], 'status'=>$_POST['status_id'] ] );
//если выбран регион, но пуст город и статус, показываем все анкеты текущего региона
if( empty($_POST['city']) && empty($_POST['status_id']) ){
$allAnket = Anket::model()->findAllByAttributes( [ 'ban'=>!1, 'region_id'=>$_POST['region']] );
}elseif(empty($_POST['city']) && !empty($_POST['status_id']) ){ //если пуст город, но выбран регион и статус
$allAnket = Anket::model()->findAllByAttributes( [ 'ban'=>!1, 'region_id'=>$_POST['region'], 'status'=>$_POST['status_id'] ] );
}elseif(empty($_POST['status_id']) ){ //если выбран регион и город, но не выбран статус, показываем все анкеты этого города без статуса
$allAnket = Anket::model()->findAllByAttributes( [ 'ban'=>!1, 'city_id'=>$_POST['city'] ] );
}
}
$this->renderPartial('table', ['allAnket'=>$allAnket]);
}
//кусок из вьюхи index
Код: Выделить всё
<div id="tableResult">
<?php $this->renderPartial('table', ['allAnket'=>$allAnket, 'pages'=>$pages]); ?>
</div>
<?php $this->widget( 'CLinkPager', [
'pages' => $pages,
'firstPageLabel' => false,
'lastPageLabel' => false,
'prevPageLabel' => '«',
'nextPageLabel' => '»',
//'maxButtonCount' => 5, //кол-во кнопок
'header' => false,
'selectedPageCssClass' => 'active',
'hiddenPageCssClass' => 'disabled',
'htmlOptions' => array('class' => 'pagination'),
//'cssFile' => Yii::app()->theme->baseUrl . '/css/pager.css',
]
);
?>