yiiz
(Cnyuzhiwei)
1
在一个view的片段缓存里用到了CListView,在数据量已经有分页的情况
假如清空缓存后第一次进入的是第一页,再进行第二页,一切正常。
假如清空缓存后第一次进入的是第二页,再点击第一页,再刷新(此时在第一页,同时也可发现分页的URL和第一种情况已经不一样了),再点击第二页,就会出现页面混乱。
重现方法,分下面两种情况操作,第一种一切正常。第二种会出现页面混乱,URL地址也不对。
-
先打开这个页面(此时在第一页),点击第二页,刷新,然后点击其它页面都一切都正常。
-
先打开这个页面(此时在第一页),清空缓存,点击第二页,再点击第一页,再刷新,然后再点击第二页时就会出现页面混乱,确实是取到了第二页的内容,但没有在正确的地方替换到第一页的内容。同时,会发现在上述步骤“再刷新”后产生的分页URL和第一次就进入第一页时产生的URL不一样,此时会多了一个参数ajax=yw0
强哥,这是一个BUG吗?不知道我说的是否明白,如果需要我可以截图传上来。
qiang
(Qiang Xue)
2
这是有可能的,算是一个bug,但是不好更正,因为因素太多了。这种问题主要出现在缓存的内容包括了影响全局设置的参数,例如自动生成widget id。
我建议在这里只缓存数据,而不要缓存页面内容。
yiiz
(Cnyuzhiwei)
3
qiang
(Qiang Xue)
4
这是由CPagination导致的。CPagination在生成每个page button的URL时会保存当前所有的$_GET变量,然后添加上page变量(因为这样才能在其它页面保持当前页面的$_GET状态)。你可以配置它的params属性,参见CPagination::params的API。
yiiz
(Cnyuzhiwei)
5
是的,但第二种情况下,通过FireBug可以看到提交时的URL是http://taobao.haokula.com/posts/ajax/yw0/TaobaoArticle_page/3?ajax=yw0
后面还有个ajax,明显重复,我感觉应该是URL规则导致URL生成的问题。
yiiz
(Cnyuzhiwei)
6
我另外一个实际应用场景是没有用缓存,也没有设置URL的path规则,这时就没有多出一个的问题,是正常的。
qiang
(Qiang Xue)
7
你可能有条rule用的是"…/*"=>‘controller/action’
你需要把/*去掉。
yiiz
(Cnyuzhiwei)
8
嗯,多谢强。不过我觉得就是用了"…/*"=>‘controller/action’,也应该是可以去重的吧
我先把url rule的/*去掉
页面会出现乱的问题,我先试试只缓存数据的情况吧。
yiiz
(Cnyuzhiwei)
9
强哥,闲来无事,还是稍查了下(我的环境调试总是造成浏览器崩溃,所以就没调试,只能迂回了也没深入),目前有两种方案可以解决页面乱的问题,希望对强哥以后解决这个问题有所帮助:
-
在缓存的依赖参数varyByParam中加上‘[color=#444444][font=Arial, Helvetica, sans-serif][size=2]ajax[/size][/font][/color]’
-
页面存在一个yw0的CMenu,又存在一个id为yw0的的CListview,这两个冲突也是造成这个问题的原因。假如我把任何一个id重新设置一下,就不会出现这个问题。
这两个现象应该对查找原因是有用的,希望对强哥有所帮助。