'use_page_numbers'时分页当前页面不正确

时间:2014-02-12 09:28:40

标签: php codeigniter pagination codeigniter-2 current-page

我在我的网站上使用CI分页库,现在将$ config [' use_page_numbers']设置为TRUE,当前页面始终是第一个。一切正常,除此之外。

其他设置:

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

这是计算当前页面的功能(输出正确)。当我在第一页上返回1时,在第三页上返回3时依此类推:

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

......但是,它不起作用。

我尝试手动设置,仅用于测试,$ config [' cur_page'] = 2的值(所以这意味着第二个链接应被视为有效)但完全没有变化。

CI版本是最新的。


LE:SOLUTION

这里似乎是前缀问题。根据我的实际配置,链接将是这样的www.site.com/mypage/p2,它不起作用。 工作链接为www.site.com/mypage/p/2/,uri_segment = 3,路由mypage / p /(:num)。 但是,我真的想拥有第一个链接结构,所以这里是我的解决方案(不是很好,因为你必须修改一些系统库代码):

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
}

......现在可行了!

如果有人有更好的解决方案,请告诉我们! 感谢。

1 个答案:

答案 0 :(得分:0)

是的,你是对的,因为你的片段得到了p(p2)

,它将无效

要做到这一点,你必须修改核心但我会说不要修改核心只是扩展分页类并修改代码如下:

添加新的类变量

var $use_rsegment       = FALSE;

然后修改第157行的create_links()

//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分段是新的路由分段,现在设置像这样的分页配置

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

因此,您可以在需要时使用这两个选项。当你有路由集rsegment true