jiameng
(Jiameng Jason)
1
请教大家一下:如题
我想在所有的grid表单分页按钮上加上一个事件
就是:点击下一页,页面开始遮罩,然后等到grid ajax执行完毕页面显示下一页内容后,遮罩去掉,
就是给用户一个页面正在处理中的这样一个效果
由于我这个表中数据有百万条,用grid分页很吃力,而且点击下一页,页面相应了足足有10多秒,才加载到下一页内容,这样点击分页很慢,
就想用户点击下一页时,用jquery显示一个遮罩的div
我知道CGridView中有beforeAjaxUpdate和afterAjaxUpdate,但是我程序里面有很多个表单grid分页,难道每个页面view里面都要加上这两个js回调处理函数吗,太繁琐了吧,不知道有没有好的方法,
请教大家一下如果修改Yii底层的的方法才能实现这种效果,或者yii本身有这种配置?? 
yiqing95
(Yiqing 95)
2
既然你自己都找出这种方案了 那么解决就简单多了:
自己实现CGridView的子类 放一个目录(自己建立或者干脆就放components目录下面这样可以自动导入)然后全项目搜索替换 ‘zii.widgets.grid.CGridView’ => ‘appliction.components.MyGridView’
可以多些参数 避免替换错了 不要光替换CGridView 到MyGridView 这样容易出问题 这种替换字符串越多越准确
现在基本上所有的IDE都支持这种全项目内的搜索替换功能
祝你好运!
jiameng
(Jiameng Jason)
3
之前看过你的帖子,首先很感谢你,呵呵
我之前想到过这么替换,可是太繁琐了,虽然有IDE工具,我项目里面有太多的grid view 怕以后不想要遮罩,想改回来的话就悲剧了
现在想还是修改Yii底层的CGridView类,修改一个都变过来了,呵呵,懒人就这了……
暂时也没想到其他好的方法了,
谢谢了……
祝工作顺利 
jiameng
(Jiameng Jason)
4
还有一个问题,
就是我在view里面
$this->widget(‘zii.widgets.grid.CGridView’,array(
……
‘dataProvider’=>$userModel->search();
)
就是我这个$userModel有百万条记录,
这个view分页特别慢,
有没有优化$userModel->search()的方法,不知道Yii里面怎么优化这种情况??
yiqing95
(Yiqing 95)
5
ar本身就会占大量内存 在生产环境中 一定要开启schema缓存(减少不必要的查询)。(搜索可以用原生sql做 不要用ar) 还有大数据量不知道别人怎么做 我一般会这样考虑 搜索一般都用专业搜索方案的比如 xunSearch Luncece solr 他们内部都自带分页功能的 当常见的sql方案(比如建索引等 查询优化等)用完了 就需要考虑这些专业方案了
另外对你 直接改CGridView的做法并不赞同 影响升级的 一升级直接给你覆盖掉了
我上面说的全局替换并不影响的 不想要遮罩了 在修改那个类 或者再用IDE改回来 这个几分钟的事 再说不要想那么远 还没到那个时候 你是提前给自己找纠结 
jiameng
(Jiameng Jason)
6
前几天没来论坛里,呵呵,今儿个看到你的回复,很感谢
我最后还是用IDE替换了, 
这几天我们在各种调试怎么优化分页速度,效果很不尽人意
也参与了你的意见,在试试吧,呵呵