带有获取参数的codeigniter分页url

Posted

技术标签:

【中文标题】带有获取参数的codeigniter分页url【英文标题】:codeigniter pagination url with get parameters 【发布时间】:2011-07-20 01:41:32 【问题描述】:

当我在 URL 中传递参数时,我无法在 codeigniter 上设置分页

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

我的$config['base_url'] 应该是什么才能使分页起作用?

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

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

谢谢

【问题讨论】:

【参考方案1】:

这个问题的最新答案是;

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

$config['reuse_query_string'] = true;

之后你应该初始化分页:

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

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

【讨论】:

这是完美的答案。尝试这个。所有其他答案也标记为正确也是浪费时间。 这个答案应该被投票并提升到顶部。投票最多的答案在过去可能有所帮助,但现在在某些阶段会中断。 这对我来说效果最好,我接手了另一个开发人员项目,该项目使用帖子而不是获取搜索,这是一团糟,但是一旦我将所有内容从帖子切换到获取,我发现这很有用跨度> 在我的例子中它显示The URI you submitted has disallowed characters.。 URL 生成如search/10&email=&mobile=11。现在我该怎么办【参考方案2】:

我遇到过类似的问题,根据上面的答案,这里是我必须根据自己的需要进行定制。

我的 URI 应该是这样的:

base_url() . /search/?term=

所以,这就是我所做的:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

在分页配置中:

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

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

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

要解决这个问题,请使用 $config['first_url']

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

【讨论】:

这个解决方案救了我的命。它运行良好,我在文档中没有看到任何关于“后缀”配置的信息。谢谢! 很遗憾 CI 没有在他们的文档中写 $config['suffix']@_@ 你救了我的命.. 很好的答案! 这是一个真正的解决方案,必须标记为答案.. 很好的答案 +1 伙计,这太棒了,+1【参考方案5】:

在您的控制器中:

$config['anchor_class'] = "class='链接分页'";

在你看来:

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

行前:

$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.'=';

【讨论】:

【参考方案8】:

我认为您正在尝试做与我尝试做的事情相同的事情,并且通过不设置基本 url 并且仅使用此设置使我不必手动编辑库来使其正常工作

$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); 

【讨论】:

【参考方案9】:

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

感谢您的帖子,这为我节省了大量额外的、不需要的编码!

【讨论】:

【参考方案10】:

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

var $get='';

找到所有“a”元素并在href="........'.$this-&gt;get.'"'&gt;.......&lt;/a&gt;中添加$get

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

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

就是这样!希望对你有帮助。

【讨论】:

【参考方案11】:

这是我的 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);
);

对我来说很好。

【讨论】:

伟大而简单但不是最好的解决方案,因为如果你不离开元素,链接不会改变。【参考方案12】:

我今天也遇到了同样的问题。我的解决方案是这样的:

    生成分页链接并将它们存储在字符串中($pagination = $this-&gt;pagination-&gt;create_links();

    使用正则表达式查找所有链接并添加查询字符串

使用的正则表达式代码为:

<?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);

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

    查找所有链接 用原始链接和查询字符串替换唯一链接(因为有上一个/下一个链接,相同的链接可能出现多次)。

然后只需将变量分配给将要显示的模板并使用 print $your_pagination_variable_name;显示带有您的查询字符串的链接!

【讨论】:

【参考方案13】:

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

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

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

它应该这样工作,你会得到$this-&gt;input-&gt;get("per_page")中的偏移量。

代码强大!

【讨论】:

【参考方案14】:

解决方案是 CodeIgniter 不能那样工作。 我需要的是“类型”中每个选项的方法(在控制器中) 所以一种选择是一种称为 :groups 的方法,另一种称为 entry 等 每个方法都根据需要引用不同的模型类或方法。

我正在努力更好地理解 OOP 和 CI ...稍作调整...如果我错了,请随时评论和纠正我。 谢谢

【讨论】:

【参考方案15】:

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

【讨论】:

以上是关于带有获取参数的codeigniter分页url的主要内容,如果未能解决你的问题,请参考以下文章

使用分页时的 Codeigniter url 重写问题

009.CI4框架CodeIgniter, 网页访问GET的URL参数获取,分段输出URL参数

php 分页类 兄弟连的分页类无法获取到url的参数和值。

Django:如何获取当前 URL 标记名(用于分页)?

按特定页码获取分页数据

jqgrid 如何获取分页的信息:当前页和总页数,作为参数传递到url