@DimkaI
Системный адинистратор, разработчик ПО

Как в Yii2 DataProvider по ID узнать номер страницы в пагинаторе?

Со страницы списка записей перехожу либо на редактирование, либо на добавление новой записи. После сохранения, необходимо перейти на ту страницу, где присутствует ранее редактировавшаяся, или добавленная новая запись. Естественно в actionIndex передаётся id записи, но показывается всегда первая страница списка.
Как узнать номер страницы, на которой находится запись с переданным id?

public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post()) && $model->save())
        {
            return $this->redirect([ 'index', 'id' => $model->id ]);
        }

        $searchModelM = new MovingSearch([ 'item_id' => $model->id ]);
        $dataProviderM = $searchModelM->search(Yii::$app->request->queryParams);

         return $this->render('update', [
            'searchModelM'  => $searchModelM,
            'dataProviderM' => $dataProviderM,
            'model'         => $model,
        ]);
    }

    public function actionIndex()
    {
        $searchModel = new ItemsSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }


Уточнение. Нужно выводить именно все записи, а не только с конкретным id, иначе бы мог воспользоваться фильтром..
  • Вопрос задан
  • 278 просмотров
Решения вопроса 1
@DimkaI Автор вопроса
Системный адинистратор, разработчик ПО
В общем получилось не очень оптимальное решение, но оно работает:
public function actionIndex()
    {
        $searchModel = new ItemsSearch();
        if (isset(Yii::$app->request->queryParams['id'])) {
            $id = Yii::$app->request->queryParams['id'];
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
            $dataProvider->query->select(Items::tableName() . '.id');
            $pageSize = $dataProvider->pagination->pageSize;
            $dataProvider->pagination = FALSE;
            $rows = $dataProvider->getModels();
            $page = 0;
            foreach ($rows as $key => $val) {
                if ($id == $val->id) {
                    $page = ceil(($key + 1) / $pageSize);
                    break;
                }
            }
            return $this->redirect(['index', 'page' => $page]);
        }
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }


Возможно кому-то понадобится в будущем.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы