使用 CodeIgniter 分页时丢失 URI 段

Posted

技术标签:

【中文标题】使用 CodeIgniter 分页时丢失 URI 段【英文标题】:Losing URI segments when paginating with CodeIgniter 【发布时间】:2011-03-02 12:06:06 【问题描述】:

我有一个 /payments 界面,用户应该能够通过价格范围、银行和其他内容进行过滤。这些过滤器是标准选择框。当我提交过滤器表单时,所有的帖子数据都会转到另一种称为付款/搜索的方法。该方法执行验证,将 post 值保存到会话 flashdata 中,并将用户重定向回 /payments,通过 URL 传递 flashdata 名称。

所以我没有过滤器的标准分页链接是这样的:

payments/index/20/
payments/index/40/
payments/index/60/

如果你提交过滤表单,返回的 URL 是:

payments/index/0/b48c7cbd5489129a337b0a24f830fd93

这很好用。如果我将零更改为其他内容,则分页就好了。然而,唯一的问题是 > 页面链接在分页偏移后不会保留散列。 CodeIgniter 正在生成忽略附加 uri 段的页面链接。

我的 uri_segment 配置已经设置为 3:

$config['uri_segment'] = 3;

我无法将 uri_segment 设置为 4,因为该哈希可能存在也可能不存在。关于如何解决这个问题的任何想法? CI是否必须将偏移量作为uri中的最后一段?也许我正在尝试一种不正确的方法,所以我全神贯注。

谢谢各位。

edit:你可能会问,为什么我要通过 uri 传递 flashdata 名称?因为它允许用户打开多个浏览器选项卡并在每个选项卡中进行不同的搜索。对于您执行的每个过滤,都会生成一个新的 flashdata var。

【问题讨论】:

嗨。我想问你你是如何实现过滤器的哈希的?我也有过滤器和分页,我喜欢你的解决方案。谢谢! 【参考方案1】:

为什么不将哈希设置为会话项?

$this->session->set_userdata('session_flashdata_hash', $hash);

哈希将一直可用,直到您取消设置为止

$this->session->unset_userdata('session_flashdata_hash');

或者直到你销毁会话。

$this->session->sess_destroy();

【讨论】:

您可能会问,为什么我要通过 uri 传递 flashdata 名称?因为它允许用户打开多个浏览器选项卡并在每个选项卡中进行不同的搜索。对于您执行的每个过滤,都会生成一个新的 flashdata var。【参考方案2】:

您为什么不检查哈希是否存在并根据它设置uri_segment

【讨论】:

【参考方案3】:

仅针对来自 Google 的用户,以下是解决方案:

在分页配置数组中,我为此更改了我的 base_url:

$config['base_url'] = site_url('payments/index/' . $this->uri->segment(3) . '/' . $this->uri->segment(4));

segment(3) 是我的偏移量,segment(4) 是哈希。因此,在这种情况下,哈希可能存在也可能不存在,并且分页仍然有效。

另一种方法可能是:如果您转到付款,并且 URL 中没有 flashdata ID,它会将用户重定向到付款/搜索并创建一个带有空过滤器的空数组。然后它重定向回支付/_NEW_FLASHDATA_ID_HERE_。这样,URL 将始终在 URL 中具有 flashdata ID,并且您可以像往常一样在最后一个 URI 段中具有分页偏移量。

【讨论】:

以上是关于使用 CodeIgniter 分页时丢失 URI 段的主要内容,如果未能解决你的问题,请参考以下文章

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

尝试在 Codeigniter 4 中启动分页时返回错误

Gridpanel在分页时丢失了过滤器

始终使用 CodeIgniter 分页类显示上一个和下一个链接

在 CodeIgniter 中使用搜索过滤器进行分页

在codeigniter中搜索所有分页链接的分页