2011-07-22 43 views
1

我想製作一個記住搜索表單輸入的CListView。我的應用程序將每個搜索輸入(以及用戶查看的當前頁面)保存到用戶會話中,並將搜索ID添加到分頁參數中。在Yii CLinkPager首頁鏈接中顯示「page = 1」參數

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

但由於在CLinkPager第一頁的鏈接不顯示頁面= 1「參數,每次我點擊其他網頁的鏈接(比如2頁),應用程序會認爲我需要的電流'搜索'(當前頁面值爲2)。

爲了解釋這個問題,有沒有什麼辦法讓CLinkPager在第一頁的鏈接顯示param'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, 
      )); 
} 

回答

2

你也許可以通過修改createPageUrl方法延長CPagination和刪除/修改if($page>0)條件永遠是正確的。 (或者更好的是,添加一個附加參數來打開/關閉該行爲。)

+0

我在考慮擴展CPagination。我正在研究是否有更好的方法。但我很高興有一個人也這麼認爲。謝謝。 :) –

+1

沒有寫你自己的尋呼機,我沒有看到,因爲這個邏輯是硬編碼的功能。您可以提交功能請求以修改其將來的工作方式。 – ldg

+0

擴展類非常簡單,工作得很好。 :) http://pastebin.com/DJzYp6Sv –