首页 > CMS > PhpCMS > 正文

phpcms v9 get标签的一个bug

2024-09-10 07:15:21
字体:
来源:转载
供稿:网友

phpcms是一个十分强大的cms开发平台,自定义程度很高,如果懂技术的话,使用起来如鱼得水,事半功倍,特别是最新的v9,采用mvc框架结构,性能更好,但是由于v9是一个推倒重来的系统,里面必然会存在多多少少的bug.get标签在phpcms2008版本的时候就很受开发者欢迎,自定义程度很高,v9也继承了2008的get标签,最近在使用v9的get标签是,发现一个不足之处.

  1. {pc:get sql="SELECT * FROM phpcms_member" cache="3600" page="$page" dbsource="discuz" return="data"
  2.  <ul> 
  3.  {loop $data $key $val
  4.  {$val[username]}<br /> 
  5.  {/loop} //Vevb.com 
  6.  </ul> 
  7.  {$pages
  8.  {/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"

分页正常出现.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表