CodeIgniter中的分页,需要禁用查询字符串,以便我们可以缓存

时间:2011-10-18 21:17:47

标签: codeigniter caching pagination

我们的CI安装在配置中具有以下设置...

$config['enable_query_strings'] = TRUE;

我们需要这个,以便我们的应用程序的另一个区域可以使用第三方API正确运行。然而,正在发生的事情是,分页是默认为查询字符串的分页方法,这种方法与缓存无关。

现在,他们看起来像这样......

http://localhost/something/?&page=6

缓存效果不佳,主要是因为每个页面的URL都与CI相同。我的目标是切换到下面的示例,而不会弄乱我的应用程序的其余部分的全局设置。

我一直试图在应用程序的这一部分中找到一种方法来禁用上述设置,这样我们就可以正确地为分页提供单独的URL,就像这样......

http://localhost/something/1
http://localhost/something/2
http://localhost/something/3

到目前为止,我一直无法覆盖此控制器的设置,老实说,我不确定是否有办法实际执行此操作。任何帮助表示赞赏。必须采用某种方法以某种方式禁用单个控制器的功能。

2 个答案:

答案 0 :(得分:2)

您可以使用routing吗?

$route['something/page/(:num)'] = "something?&page=$1";

编辑:使用$config['enable_query_strings'] = TRUE;

关闭分页查询字符串

系统/库/ Pagination.php

〜第134行

更改

    if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
    {
        if ($CI->input->get($this->query_string_segment) != 0)
        {
            $this->cur_page = $CI->input->get($this->query_string_segment);

            // Prep the current page - no funny business!
            $this->cur_page = (int) $this->cur_page;
        }
    }
    else
    {
        if ($CI->uri->segment($this->uri_segment) != 0)
        {
            $this->cur_page = $CI->uri->segment($this->uri_segment);

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

        if ($CI->uri->segment($this->uri_segment) != 0)
        {
            $this->cur_page = $CI->uri->segment($this->uri_segment);

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

〜第196行

    if ($CI->config->item('enable_query_strings') === TRUE OR $this->page_query_string === TRUE)
    {
        $this->base_url = rtrim($this->base_url).'&'.$this->query_string_segment.'=';
    }
    else
    {
        $this->base_url = rtrim($this->base_url, '/') .'/';
    }

        $this->base_url = rtrim($this->base_url, '/') .'/';

可能会这样做。或者更好的形式是挂钩页面......

答案 1 :(得分:2)

简单的解决方案......

$this->config->set_item('enable_query_strings',FALSE);

在调用控制器中的分页逻辑之前,先将其放入。感谢#codeigniter IRC频道中的Taftse进行此简单覆盖。