phpcms是一个十分强大的cms开发平台,自定义程度很高,如果懂技术的话,使用起来如鱼得水,事半功倍,特别是最新的v9,采用mvc框架结构,性能更好,但是由于v9是一个推倒重来的系统,里面必然会存在多多少少的bug.get标签在phpcms2008版本的时候就很受开发者欢迎,自定义程度很高,v9也继承了2008的get标签,最近在使用v9的get标签是,发现一个不足之处.
- {pc:get sql="SELECT * FROM phpcms_member" cache="3600" page="$page" dbsource="discuz" return="data"}
- <ul>
- {loop $data $key $val}
- {$val[username]}<br />
- {/loop} //Vevb.com
- </ul>
- {$pages}
- {/pc}
这 是官方给出的v9 get标签使用说明,其中page="$page" 是来调用分页的,当然如果用官方给出的那种简单的标准的sql语句来说毫无问题,问题就出现在如果我使用复杂的sql语句就会出现分页不出现的情况,必如 这个语句sql="SELECT * FROM `v9_news` where catid in (select catid from v9_category where parentid=6) order by updatetime desc".测试多遍不出现分页,经过分析其get代码,发现问题出现在get函数的这条语句上.
if ($sql = preg_replace('/select([^from].*)from/i', "SELECT COUNT(*) as count FROM ", $datas['sql'])) {
用正则表达式替换select from,上述sql语句里面出现两次 select from,都被替换掉了。所以造成分页不会出现,解决问题办法是把语句变成这样的sql="SELECT * FROM `v9_news` where catid in (11,12) order by updatetime desc"或者先把select catid from v9_category where parentid=6
查找出来放进变量,变成这样的:sql="SELECT * FROM `v9_news` where catid in ($newsarrchildid) order by updatetime desc"
分页正常出现.
新闻热点
疑难解答