用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1777|回复: 6
收起左侧

[已解决] 菜鸟求助:CI分页跳转排序失效的问题

[复制链接]
发表于 2014-7-30 14:16:19 | 显示全部楼层 |阅读模式
本帖最后由 楓顔楓語 于 2014-7-30 16:21 编辑

如题,排序只能在第一页起作用,第二页开始不能自动保存第一页得到的分页字段,变成了默认的,不知道怎么解决,希望有人能帮助,才学PHP几个月,工作经历,经验甚少,望一天集一点。
发表于 2014-7-30 14:45:41 | 显示全部楼层
手册上已经很清楚了,建议一开始不要从数据库读数据,直接在分页控件里面设置值,
另外根据你的问题描述建议你检查一下你的$config['uri_segment'];参数。该参数默认值是3,如果你的url并非默认的Controller/function/page形式的。你需要重新定义该值
 楼主| 发表于 2014-7-30 15:11:22 | 显示全部楼层
smallerpig 发表于 2014-7-30 14:45
手册上已经很清楚了,建议一开始不要从数据库读数据,直接在分页控件里面设置值,
另外根据你的问题描述建 ...

我详细的说下,大概是这个样子,主页显示默认的是id降序,现在id栏设置了事件,点击变成升序,同时把id和asc存入一个隐藏域自动提交到后台,这样第一页就能正常的排序了,同时把这两个字段返回到隐藏域的value中,点击下页的时候,页面变成......&per_page=2,整个页面重新加载了次,隐藏域的值也被清空,返回也就成了空,然后排序就变成默认值了,url是你说的那种形式的,所以$config['uri_segment']不会重新设置
发表于 2014-7-30 15:20:08 | 显示全部楼层
CI框架的分页控件是使用segment()获取参数的,并非你使用的传统的方式key=value方式,所以分页控件获取不到你的当前页码导致其默认总是第一页。
具体怎么使用segment()获取参数请参考:http://codeigniter.org.cn/user_guide/libraries/uri.html
 楼主| 发表于 2014-7-30 15:36:37 | 显示全部楼层
smallerpig 发表于 2014-7-30 15:20
CI框架的分页控件是使用segment()获取参数的,并非你使用的传统的方式key=value方式,所以分页控件获取不到 ...

CI的分页控件是segment()获取参数的,我没改变,&per_page=n这也只是源码显示,segment()其实就是获取这个n的值,我不知道这样说对不对,其实现在分页显示很正常,唯一不对劲的地方就是排序只能作用第一页,第二页开始排序就会变成默认值,也就是说第二也开始数据段额显示实际是默认排序显示下的第二页,并非重新排序下应该显示的第二页,查看源代码可以看到,只要点击下一页,前台传送order字段的value值都会被清空,后台就会按照默认情况下就行排序
发表于 2014-7-30 16:07:46 | 显示全部楼层
至于显示的内容不是分页控件管的事情,你的需求是默认按id排序,点击id后倒序(这个可能相反),你实现这个需求的方法是在点击id的时候传递参数给后台。然后在后台返回新的数据。
而分页控件里面的链接只是个链接,并不会带上你的隐藏域的值,即使你在页面给隐藏域赋值了,点击链接也不会提交表单。
 楼主| 发表于 2014-7-30 16:13:22 | 显示全部楼层
smallerpig 发表于 2014-7-30 16:07
至于显示的内容不是分页控件管的事情,你的需求是默认按id排序,点击id后倒序(这个可能相反),你实现这个需 ...

谢谢您了,搞定了,就是那个per_page参数的问题,因为CI第一页参数的值为空,当从第二页开始自动提交排序字段的隐藏域就被清空了,然后我只好让排序第一次提交后存到session里,只要参数的值不为空,就都是用第一次传的排序字段,这样分页跳转后排序就不会改变,可能会有漏洞,但我目前的水平实在是想不远,试了很多次,暂时也没啥问题了,感谢

本版积分规则