Yii2:将索引页面传递给视图中的面包屑并更新操作

时间:2015-06-05 12:38:09

标签: gridview yii2 breadcrumbs yii2-advanced-app

1)使用默认的LinkPager设置在索引(GridView)中有几页结果。 2)在ActionColumn中调用更新或查看操作。 3)做任何事情,然后点击面包屑返回你来自的GridView中的同一页面,但事实并非如此:你回到第1页,在某些用例中可能会非常烦人(当然可能只是简单而且不合适回到浏览器但是...)。

所以在制定一些基于$ _GET的优雅解决方案之前,有没有人知道任何LinkPager(或相关的)分页魔法呢?

提前致谢

2 个答案:

答案 0 :(得分:0)

我认为这对你有用:

$this->params['breadcrumbs'][] = ['label' => 'YourLabel', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' =>  Yii::$app->request->get('page'), 'url' => ['index', 'page' => Yii::$app->request->get('page')]];

答案 1 :(得分:0)

现在似乎没有LinkPager魔术来做到这一点,但我设法找到一个避免控制器调整的解决方案。只需编辑view.php/update.php并在breadcrumbs之前添加:

parse_str(parse_url(Yii::$app->request->referrer, PHP_URL_QUERY), $params);

然后在面包屑中:

$this->params['breadcrumbs'][] = ['label' => 'myLabel', 'url' => ['index', 'page' => isset($params['page']) ? $params['page'] : '']];

现在每次点击myLabel breadcrumb,我们都会被发送到我们来自的GridView中的正确页面。

主要缺点是第二步之外没有页面跟踪,因此如果您执行:index --> view/update/create --> !index,页面跟踪将会丢失,因此最好使用会话变量,如下所示:

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

    Yii::$app->session['myPage'] = Yii::$app->request->get('page');

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

然后在面包屑中:

$this->params['breadcrumbs'][] = ['label' => 'myLabel', 'url' => ['index', 'page' => Yii::$app->session['myPage']]];

这样页码就会随时保留;