Показать параметры "page = 1" в ссылке на первую страницу Yii CLinkPager - PullRequest
1 голос
/ 22 июля 2011

Я хочу сделать CListView, который запоминает ввод формы поиска.Мое приложение сохраняет все входные данные поиска (и текущую страницу, просмотренную пользователем) в сеансе пользователя и добавляет идентификатор поиска в параметры пагинации.

$pagination = array(
   'pageVar' => 'page',
   'currentPage' => $currentPage - 1,
   'params' => array(
         'search' => $searchId,
   )
);

Но поскольку ссылка на первую страницу в CLinkPager не отображаетсяПараметр 'page = 1', каждый раз, когда я нажимаю на ссылку с другой страницы (скажем, страницы 2), приложение будет думать, что мне нужен текущий поиск (текущее значение страницы 2).

Перефразируявопрос, есть ли способ заставить CLinkPager показывать параметр 'page = 1' на первой странице ссылки?Или у вас есть другое предложение по поводу этого:)

Спасибо

Отредактировано

Мой общий код приведен ниже.Если вы хотите дать лучшее предложение, пожалуйста, сделайте:)

public function actionIndex() {

            $model = new User();
            if (isset($_POST['User'])) {
                    $model->setAttributes($_POST['User']);
            } else {
                    if (isset($_GET['search'])) {
                            $searchId = $_GET['search'];
                            //Just getting a variable stored in the session
                            //array(
                            //     $searchId => array(
                            //          'model' => $model //the search model
                            //          'pageSize' => $pageSize //current pagination page size
                            //          'currentPage' => $currentPage //the search model
                            //     )
                            //);
                            $search = Yii::app()->user->getSearch($searchId); 
                            $model->setAttributes($search['model'], false);
                            $currentPage = $search['currentPage'];
                            $pageSize = $search['pageSize'];
                    } else {
                            //create default search
                    }
            }

            //Managing pageSize parameter
            if (isset($_GET['pageSize'])) { //Check whether there is pageSize in $_GET parameters
                    if (in_array($_GET['pageSize'], $this->getPageSizes())) {
                            $pageSize = $_GET['pageSize'];
                    } else {
                            $pageSize = self::DEFAULT_SEARCH_PAGESIZE;
                    }
            } else if (!isset($pageSize)) { //Check whether pageSize is already defined before
                    $pageSize = self::DEFAULT_SEARCH_PAGESIZE;
            }
            //Managing currentPage parameter
            if (isset($_GET['page'])) { //Check whether there is page parameter in $_GET parameter 
                    $currentPage = $_GET['page'];
            } else if (!isset($currentPage)) { //Check whether page is already defined before
                    $currentPage = self::DEFAULT_CURRENT_PAGE;
            }

            //Saving all into new session
            $newSearch = array(
                    'model' => $model->getAttributes(),
                    'currentPage' => $currentPage,
                    'pageSize' => $pageSize,
            );
            //Check whether if there is a search before and if it exists check whether the two search is the same
            if (!isset($search) || (serialize($search) != serialize($newSearch))) {
                    //Saves into session
                    $searchId = Yii::app()->user->saveSearch($newSearch);
            } //else use the old search id

            //-----------------------------------------------------
            //Building the search
            //Setting criteria
            $criteria = new CDbCriteria(array(
                                    'select' => array(
                                            '*', //just to simplify things
                                    ),
                            ));


            //Appending criteria to search model used
            $criteria = $model->search($criteria);

            //Appending pagination to current variables
            $pagination = array(
                    'pageSize' => $pageSize,
                    'pageVar' => 'page',
                    'currentPage' => $currentPage - 1,
                    'params' => array(
                            'search' => $searchId, //include the search ID in the link pager request URL
                    )
            );

            //Creating dataProvider for the search
            $dataProvider = new CActiveDataProvider('Property', array(
                                    'criteria' => $criteria,
                                    'pagination' => $pagination,
                            ));
            //Rendering
            $this->render('index', array(
                    'dataProvider' => $dataProvider,
                    'pageSize' => $pageSize,
                    'model' => $model,
                    'searchId' => $searchId,
            ));
}

1 Ответ

2 голосов
/ 23 июля 2011

Возможно, вы могли бы расширить CPagination , изменив метод createPageUrl и удалив / изменив условие if($page>0), чтобы оно всегда было истинным. (Или еще лучше, добавьте дополнительный параметр, чтобы включить / выключить это поведение.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...