二开教程 Development

提供PHPCMS常用模块的二次开发,改造,升级都修改过程代码

phpcms v9 get标签的一个bug

 admin  2023-07-03 17:06:18

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}
  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"

分页正常出现.

 

本文《phpcms v9 get标签的一个bug》发布于PHPCMS管理系统文章,作者:admin,如若转载,请注明出处:https://www.phpcms.vip/help/doc/788.html,否则禁止转载,谢谢配合!