codeigniter分页url与get参数

时间:2011-03-21 22:46:08

标签: php codeigniter

当我在URL

中传递参数时,我在codeigniter上设置分页时遇到问题

如果我的网址是这样的:search/?type=groups

我的$config['base_url']分页应该是什么?

如果我将基本网址设置为search/?type=groups,则生成的网址为search/?type=groups/10

表示$_GET['type']=groups/10

谢谢

15 个答案:

答案 0 :(得分:98)

在分页配置中:

if (count($_GET) > 0) $config['suffix'] = '?' . http_build_query($_GET, '', "&");

您当前的$_GET vars将显示在分页链接中。 您可以用另一个关联数组替换$_GET。 除非已存在查询字符串,否则不会添加查询字符串。

更新的 我刚看到,如果你从另一个分页号码返回点击第一个(1),CI就不再关心你的后缀配置了。

修复使用$config['first_url']

例如:$config['first_url'] = $config['base_url'].'?'.http_build_query($_GET);

答案 1 :(得分:17)

这个问题的最新答案是:

您应该通过启用此配置来启用查询字符串的重新使用:

$config['reuse_query_string'] = true;

之后你应该初始化分页:

$this->pagination->initialize($config);
  

添加$config['reuse_query_string']以允许自动重新填充   查询字符串参数,与普通URI段结合使用。 - CodeIgniter 3.0.0 Change Log

答案 2 :(得分:4)

如果您使用的是codeigniter 2,config.php$config['allow_get_array']中有一个选项 - 请确保其为TRUE。

然后将分页选项$config['page_query_string']设置为TRUE

最后,在您将$config['base_url']设置为"search/?type=groups"的情况下,分页会在其后添加per_page查询字符串。

它应该以这种方式工作,你将获得$this->input->get("per_page")中的偏移量。

代码强大!

答案 3 :(得分:4)

这是我的jquery解决方案:

只需在这样的div中包装分页链接:

$config['full_tag_open'] = '<div id="pagination">';
$config['full_tag_close'] = '</div>';

而不是添加以下jquery代码:

$("#pagination > a").each(function() {
    var g = window.location.href.slice(window.location.href.indexOf('?'));
    var href = $(this).attr('href');
    $(this).attr('href', href+g);
});

对我来说很好。

答案 4 :(得分:2)

我今天在同一个问题上挣扎。我的解决方案是:

  1. 生成分页链接并将其存储在字符串中($pagination = $this->pagination->create_links();

  2. 使用regexp查找所有链接并添加查询字符串

  3. 使用的正则表达式代码是:

    <?php
    $query = '?myvar=myvalue';
    $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
    $unique = array();
    if( preg_match_all("/$regexp/siU", $pagination, $matches) )
    {
        foreach ( $matches[2] as $link )
        {
            if ( !isset($unique[$link]) )
            {
                $data['pagination'] = str_replace($link . '"', $link . $query . '"', $data['pagination']);
                $unique[$link] = '';
            }
        }
    }
    unset($unique);
    

    对我来说就像一个魅力!它的作用是:

    1. 查找所有链接
    2. 使用原始链接和查询字符串替换唯一链接(因为前一个/下一个链接可能会多次出现相同的链接)。
    3. 然后只需将变量分配给将要显示的模板,并使用print $ your_pagination_variable_name;显示附加查询字符串的链接!

答案 5 :(得分:2)

我认为你正在尝试做同样的事情,我试图通过不设置基本网址来正常工作,只是使用这个设置,这使我不必手动编辑库

$this->load->library('pagination');
    $config['use_page_numbers'] = TRUE;
    $config['page_query_string'] = TRUE;
    $config['total_rows'] = 200;
    $config['per_page'] = 20; 

    $this->pagination->initialize($config); 

答案 6 :(得分:1)

解决方案是CodeIgniter不起作用。 我需要的是“类型”中每个选项的方法(在控制器中) 所以一个选项是一个叫做的方法:组,另一个叫做条目等等 每种方法都根据需要引用不同的模型类或方法。

我正在努力更好地了解OOP和CI ...稍微调整一下...如果我错了,请随意评论并纠正我。 谢谢

答案 7 :(得分:1)

使用$ config ['suffix']是IMO实现此目的的最佳方式,因为它不需要任何额外的处理作为正则表达式解决方案。 $ config ['suffix']用于create_links函数中url的渲染,这是system / libraries / Pagination.php文件的一部分,所以如果设置了它,它将用于生成urls并赢取不再需要处理,这意味着它会更快。

感谢这篇文章,这为我节省了大量额外的,不需要的编码!

答案 8 :(得分:1)

行前:

$this->base_url = rtrim($this->base_url).'&amp;'.$this->query_string_segment.'=';

替换下面的代码:

if(isset($_GET[$this->query_string_segment]))
{    
    unset($_GET[$this->query_string_segment]); 
}
$uri = http_build_query($_GET);
$uri = empty($uri) ? '?' : $uri . '&amp;';
$this->base_url = rtrim($this->base_url).$uri.$this->query_string_segment.'=';

答案 9 :(得分:1)

只需看this link 只需更新修改后的分页类,然后添加

$config['get'] = "?string=" . $_REQUEST['string']."&searchBy=" . $_REQUEST['searchBy']; 

答案 10 :(得分:0)

我遇到了同样的问题。我的解决方案是修改分页并将其放在应用程序/库中。 首先我创建

var $get='';

找到所有“a”元素并在href="........'.$this->get.'"'>.......</a>

中添加$ get

现在在控制器或模型中输入这些行

$config['get']=(isset($_GET['search']))?'?search='.$_GET['search']:'';

就是这样!我希望它会对你有所帮助。

答案 11 :(得分:0)

在您的控制器中:

$ config ['anchor_class'] =“class ='link-pagination'”;

在你的观点中:

$(".link-pagination").each(function() {
   $(this).attr("href", $(this).attr('href') + "?id=<?= $this->input->get('id') ?>");
});

答案 12 :(得分:0)

遇到同样的问题,但意识到CI的较新版本在分页类中定义了后缀。虽然它仍然没有在文档中。不需要破解它。

答案 13 :(得分:0)

我遇到过类似的问题,基于上面的答案,这里是我根据自己的需要做的定制。

我的URI是这样的:

base_url() . /search/?term=

所以,这就是我所做的:

$config['base_url'] = base_url ."/search/?term=" . $_GET['term']

答案 14 :(得分:-4)

希望您能在此页面找到答案: LINK。如果可以,请重新编辑您的答案。