5

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

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

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

如果您提交过滤器表单,则返回 URL 为:

payments/index/0/b48c7cbd5489129a337b0a24f830fd93

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

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

$config['uri_segment'] = 3;

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

谢谢各位。

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

4

3 回答 3

3

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

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

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

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

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

于 2010-06-29T16:57:00.237 回答
1

你为什么不检查哈希是否存在并uri_segment基于它设置?

于 2010-06-12T20:25:08.330 回答
1

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

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

然后哈希将可用,直到您取消设置它

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

或者直到您销毁会话。

$this->session->sess_destroy();
于 2010-06-11T16:01:52.973 回答