1

私は自分のウェブサイトで CI Pagination ライブラリを使用していますが、$config['use_page_numbers'] を TRUE に設定すると、現在のページが常に最初になります。これを除いて、すべて正常に動作します。

その他の設定:

$config['uri_segment'] = 2;
$config['prefix'] = "p";
$route['mypage/p(:num)'] = "citate/index/$1";

これは、現在のページを計算する関数です (出力は正しいです)。最初のページにいるときは 1 を返し、3 番目のページにいるときは 3 を返します。

function getPagCurr($offset, $limit){
   if( ! $offset) return $page = 1;
   else return ($offset/$limit)+1;
}

...しかし、それは機能していません。

テストのためだけに、 $config['cur_page'] = 2 の値を手動で設定しようとしましたが (これは、2 番目のリンクがアクティブと見なされることを意味します)、まったく変更はありません。

CI バージョンは最新です。


ル: ソリューション

ここでは接頭辞が問題のようです。私の実際の構成では、リンクは www.site.com/mypage/p2 のようになり、機能していません。有効なリンクは、uri_segment = 3 およびルート mypage/p/(:num) の www.site.com/mypage/p/2/ です。ただし、最初のリンク構造が本当に必要なので、これが私の解決策です (システム ライブラリ コードを変更する必要があるため、良い解決策ではありません)。

Pagination.php (開始行 166):

// Set current page to 1 if using page numbers instead of offset
if ($this->use_page_numbers AND $this->cur_page == 0)
{
   $this->cur_page = $base_page;
}

..変更:

// Set current page to 1 if using page numbers instead of offset
if ($this->use_page_numbers AND $this->cur_page == 0)
{
    $current_page = $CI->uri->segment($this->uri_segment); //get pNUM
    $current_page = substr($current_page, 1); //remove prefix
    $this->cur_page = $current_page; //set current page
}

...そして今、それは動作します!

誰かがより良い解決策を持っている場合は教えてください! ありがとう。

4

1 に答える 1

0

はい、そうです、セグメントがap(p2)を取得したため、機能しません

これを行うには、コアを変更する必要がありますが、ページネーションクラスを拡張してコードを次のように変更するだけで、コアを変更しないでください。

新しいクラス変数を追加する

var $use_rsegment       = FALSE;

次に、create_links()157行目あたりを変更します

//add
$_uri_segment = 'segment';
if($this->use_rsegment){
    $_uri_segment = 'rsegment';
}
//modify
if ($CI->uri->$_uri_segment($this->uri_segment) != $base_page)
{
     $this->cur_page = $CI->uri->$_uri_segment($this->uri_segment);

     // Prep the current page - no funny business!
     $this->cur_page = (int) $this->cur_page;
 }

uri rsegment は新しいルーティング セグメントです。次のようにページネーション構成を設定します。

$config['use_rsegment'] = TRUE;
$this->pagination->initialize($config);

したがって、必要なときに両方のオプションを使用できます。ルート セット rsegment true がある場合

于 2014-02-12T10:07:07.143 に答える