Открыть определенную страницу сетки по идентификатору записи в yii1
Я работаю с yii1
,
У меня есть многостраничный список записей, который отображается с помощью CGridView
отсортировано определенным образом.
я имею id
записи. И я хочу открыть страницу, на которой отображается эта запись с этим точным идентификатором.
Грубо говоря, ссылка /list?too=123
открывает 12-ю страницу сетки, и среди всех записей на этой странице есть запись с id
123.
Какой самый простой способ сделать это?
2 ответа
Вы можете расширить CGridView и написать свой собственный метод для поиска страницы.
MyGridView.php
<?php
Yii::import('zii.widgets.grid.CGridView');
class MyGridView extends CGridView {
public function init()
{
if (!isset($_GET[$this->dataProvider->getPagination()->pageVar]) && isset($_GET['too']))
$this->searchPage();
parent::init();
}
public function searchPage(){
$baseCriteria=$this->dataProvider->getCriteria();
$criteria=clone $this->dataProvider->getCriteria();
if(($sort=$this->dataProvider->getSort())!==false)
{
// set model criteria so that CSort can use its table alias setting
if($baseCriteria!==null)
{
$c=clone $baseCriteria;
$c->mergeWith($criteria);
$this->dataProvider->model->setDbCriteria($c);
}
else
$this->dataProvider->model->setDbCriteria($criteria);
$sort->applyOrder($criteria);
}
$this->dataProvider->model->setDbCriteria($baseCriteria!==null ? clone $baseCriteria : null);
$data=$this->dataProvider->model->findAll($criteria);
$position = 0;
foreach($data as $model) {
$position++;
if ($model->uid == $_GET['too']) {
$curPage = ceil($position / $this->dataProvider->getPagination()->pageSize);
$_GET[$this->dataProvider->getPagination()->pageVar] = $curPage;
}
}
}}
Мой способ сделать это
- Введите код, чтобы получить номер страницы из идентификатора элемента. В этом случае действие контроллера вычислит, какую страницу нужно загрузить, используя существующий / отдельный поиск.
- Передайте этот номер страницы в файле представления, куда загружается сетка.
- Если этот специальный номер страницы пропущен, просто загрузите эту страницу при прохождении
$model->search()
кCGridView
,
Надеюсь, поможет.