Yii2 CRUD和分页

时间:2018-07-13 06:48:51

标签: pagination yii2 crud

我将Yii2与Pjax一起用于索引/网格视图列表。使用pjax分页,搜索所有工作正常,而无需回发到服务器。

我的问题现在开始, 假设我在第2页上,我单击了该第二页列表的编辑记录,我到达了更新视图,我进行了更改并保存,现在我被重定向到视图,现在我单击了面包屑中的索引链接。 / p>

我想到达索引的第2页,而不是第1页。

为此的传统过程是将裁判页面参数添加到面包屑中。

但是有什么简单的方法可以解决这个问题,我可以写几行代码并将其应用于后端的每个地方?

感谢您的阅读。

3 个答案:

答案 0 :(得分:1)

为了记住网格过滤器,我使用了yii2-grid-view-state

答案 1 :(得分:1)

如果只需要存储页面,是否像page一样将<model/view>参数传递到视图URL(<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值,并填充index网址(如果不为null):

/* @var $page int */

$this->title = $model->name;
$this->params['breadcrumbs'][] = ['label' => 'Index', 'url' => ['index', 'page' => $page]];

因此,当您按下索引面包屑时,它将打开您从中输入的页面。


会话实施(@ user1764431解决方案)的一些优势:

  • 每个标签页都可以返回到其自己的最后一页
  • 简单而愚蠢的解决方案

一些缺点:

  • 如果您需要存储一些过滤器参数,则网址可能会很长

答案 2 :(得分:0)

只需在每个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*/