Я использую Yii2 с Pjax для листинга index / gridview. используя pjax pagination, поиск работает нормально без обратной передачи на сервер.
Моя проблема начинается сейчас, Предположим, я нахожусь на странице номер 2, я нажал на запись редактирования этого списка 2-й страницы, я добрался до просмотра обновления, я внес изменения и сохранил, теперь я перенаправлен на просмотр, теперь я щелкнул ссылку индекса из хлебных крошек.
Я хочу перейти на страницу номер 2 индекса, а не на 1-ю страницу.
Традиционный процесс для этого - получить параметры страницы рефери и добавить их в хлебные крошки.
Но есть ли какой-нибудь простой подход к этой проблеме, когда я могу написать несколько строк кода и применить его ко всему в бэкэнде?
Спасибо за прочтение.





Для запоминания фильтра сетки на страницах я использую yii2-сетка-вид-состояние
Я не уверен, почему мне нужно использовать эту сетку, я не хочу запоминать состояние представления сетки, так как на странице сетки во время навигации все работает нормально. но когда я редактирую Запись № 39 со страницы 2, я перехожу в режим «Обновить», и оттуда, когда я нажимаю на хлебные крошки, я снова перехожу на страницу 1,
Я пытался следовать инструкциям в вашем решении, но не могу понять, где создать 1-й шаг? я хочу сказать, на каком Пути?
yii2-grid-view-state на 1. шаге создайте расширенный класс GridView
это все еще бесполезно, обратитесь к моему ответу выше, это действительно просто, 100% родное и работает нормально ....
Если вам нужно сохранить только страницу, разве не так просто передать параметр page в URL-адрес вашего просмотра (<model/view>), например <model>/view?id=<id>&page=<page>?
в вашем представлении index.php отредактируйте свой ActionColumn следующим образом:
[
'class' => 'yii\grid\ActionColumn',
'urlCreator' => function ($action, $model, $key, $index) {
return \yii\helpers\Url::to([$action, 'id' => $model->id, 'page' => Yii::$app->request->getQueryParam('page', null)]);
},
],
Как видите, я получаю параметр страницы из URL-адреса запроса и передаю его кнопкам действий моделей (всем кнопкам, но в вашем вопросе этого, конечно, будет достаточно для кнопки view)
И когда вы нажимаете на модель view, в нашем контроллере нам нужно получить это значение page и передать его нашему представлению view.php (чтобы поместить его в хлебные крошки).
Наш ModelController:
public function actionView($id, $page = null)
{
return $this->render('view', [
'model' => $this->findModel($id),
'page' => $page,
]);
}
И, наконец, представление view.php получит значение page и заполнит URL-адрес index (если не ноль):
/* @var $page int */
$this->title = $model->name;
$this->params['breadcrumbs'][] = ['label' => 'Index', 'url' => ['index', 'page' => $page]];
Поэтому, когда вы нажимаете на хлебную крошку Index, откроется страница, с которой вы вошли.
Некоторые преимущества реализации сеанса (решение @ user1764431):
Некоторые недостатки:
Это решение в целом утомительно и требует написания очень большого количества строк ... Я нашел более простое и простое решение.
Просто добавьте следующий код в каждый контроллер actionIndex (), остальное все позаботится
$searchModel = new CentervideosSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
/*Code insertion block begin*/
$params = Yii::$app->request->queryParams;
if (count($params) <= 1)
{
$params = Yii::$app->session['customerparams'];
if (isset(Yii::$app->session['customerparams']['page']))
$_GET['page'] = Yii::$app->session['customerparams']['page'];
if (isset(Yii::$app->session['customerparams']['per-page']))
$_GET['per-page'] = Yii::$app->session['customerparams']['per-page'];
}
else
{
Yii::$app->session['customerparams'] = $params;
}
$dataProvider = $searchModel->search($params);
/*Code insertion block Ends*/
Используя это решение stackoverflow.com/questions/29255851/…, я отсортировал