与CodeIgniter一起分页时丢失URI段

时间:2010-06-11 04:40:41

标签: php codeigniter pagination offset segment

我有一个/ payment界面,用户应该可以通过价格范围,银行和其他内容进行过滤。这些过滤器是标准选择框。当我提交过滤器表单时,所有帖子数据都转到另一个名为payment / search的方法。该方法执行验证,将帖子值保存到会话flashdata中,并将用户重定向回/通过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变量。

3 个答案:

答案 0 :(得分:3)

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

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

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

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

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

答案 1 :(得分:1)

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

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

哈希将在你取消设置之前可用

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

或直到你销毁会话。

$this->session->sess_destroy();

答案 2 :(得分:1)

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