Параметр сохранения поиска Yii2 pjax

У меня есть фильтр для каждой страницы и gridview. Они помещены в pjax. Когда я меняю разбивку на страницы и сортировку, а затем использую свой постраничный фильтр, параметры разбиения на страницы и сортировки теряются. Я хочу сохранить это. Как это сделать? Мой код:

<?php Pjax::begin(['id' => 'pjax']) ?>
<?= Html::dropDownList('per-page', Yii::$app->request->get('per-page') != NULL ? Yii::$app->request->get('per-page') : [10 => 10], [1 => 1, 5 => 5, 10 => 10, 25 => 25, 50 => 50, 100 => 100], [
    'onchange' => '
        $.pjax.reload({
            url: "'.Url::to([Yii::$app->controller->action->id, 'id' => Yii::$app->request->get('id')]).'?StandartSearch%5Bdate%5D=" + $(\'#date\').val() + "&per-page=" + $(this).val(),
            container: "#pjax",
        });
    ', 
    'class' => 'form-control',
    'id' => 'per-page'
]) ?>
<?= GridView::widget([
    'id' => 'gridview',
    'dataProvider' => $dataProvider,
    'columns' => [
        // columns
    ],
]); ?>
<?php Pjax::end() ?>

person Fisher    schedule 10.12.2015    source источник


Ответы (1)


Постраничный фильтр помещается в контейнер pjax. Так что, очевидно, они потеряются, когда событие pjax будет завершено.

Чтобы они не потеряли свой текущий выбор, вы можете разместить постраничный фильтр в форме вне pjax.

и свойство $formSelector в pjax, которое указывает на этот идентификатор формы фильтра.

ссылка: http://www.yiiframework.com/doc-2.0/yii-widgets-pjax.html#$formSelector-detail

person Alpesh Panchal    schedule 10.12.2015
comment
Можете ли вы привести мне пример? <?php Pjax::begin(['id' => 'pjax', 'formSelector' => '#per-page select']) ?><?= Html::beginForm(['user/index'], 'get', ['data-pjax' => '', 'id' => 'per-page']); ?><?= Html::dropDownList('per-page', Yii::$app->request->get('per-page') != NULL ? Yii::$app->request->get('per-page') : [10 => 10], [1 => 1, 5 => 5, 10 => 10, 25 => 25, 50 => 50, 100 => 100], ['class' => 'form-control']) ?><?= Html::submitButton('Ok', ['class' => 'btn btn-lg btn-primary', 'name' => 'hash-button']) ?><?= Html::endForm() ?> Это не работает - person Fisher; 11.12.2015
comment
‹form id=form1›ваши поля фильтра здесь‹/form› ‹?php Pjax::begin(['id' =› 'pjax', 'formSelector' =› '#form1']) ?› Итак, что бы ни было выбрано из форма будет передана вашему контроллеру действий в качестве параметра GET. Вы можете получить их значения, используя Yii2::$app-›request-›get('parametername') и добавить в предложение where вашего модельного запроса. - person Alpesh Panchal; 11.12.2015
comment
я помещаю свой фильтр в форму за пределами pjax и устанавливаю formSelector. Фильтр работает с pjax, но все еще теряет текущий выбор - person Fisher; 11.12.2015
comment
должно быть какое-то событие ajaxStop, которое приводит к потере фильтра при выборе. Yii2 по умолчанию этого не делает. - person Alpesh Panchal; 11.12.2015
comment
проверьте это в чистом yii2. Фильтрует внешнюю сортировку сброса pjax. Собственные фильтры в gridview сохраняют сортировку. Спасибо за помощь. - person Fisher; 11.12.2015