Работа пагинатора после ajax запроса (как решить?)

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
espltdmh50
Сообщения: 549
Зарегистрирован: 2014.04.29, 19:14

Работа пагинатора после ajax запроса (как решить?)

Сообщение espltdmh50 » 2018.08.14, 09:30

Добрый день! Нужна помощь, тех кто сталкивался или знает как правильно сделать.

Есть дефолтный метод 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' => '&laquo;',
        'nextPageLabel' => '&raquo;',                 
        //'maxButtonCount' => 5, //кол-во кнопок
        'header' => false,        
        'selectedPageCssClass' => 'active',
        'hiddenPageCssClass' => 'disabled',        
        'htmlOptions' => array('class' => 'pagination'),
        //'cssFile' => Yii::app()->theme->baseUrl . '/css/pager.css',
        
        ] 

    ); 

?>


espltdmh50
Сообщения: 549
Зарегистрирован: 2014.04.29, 19:14

Re: Работа пагинатора после ajax запроса (как решить?)

Сообщение espltdmh50 » 2018.08.14, 13:09

не стал мудрить с этими делами, сделал иначе. Воспользовался ClistView, сделал необходимые инпуты, далее аякс запрос с последующим обновлением самого ClistView через

$.fn.yiiListView.update(

'ajaxListView',
{data: ajaxRequest}
)

выбранным из бд массивом данных.

Ответить