将dede:list标签进行改造,使用SQL标签实现静态分页,在自定义表单调用的分页用他就很方便
例如会员列表的模板标签写法
{dede:listsql sql="select * from dede_member" pagesize="10"}<li><a href="[field:id runphp=yes]$id=@me;$url=GetOneArchive($id);@me=$url['arcurl'][/field:id]"><img src="[field:litpic/]">[field:XX /]</a></li>{/dede:listsql}<!--分页-->{dede:pagelist/}
- 实现教程
打开include/arc.listview.class.php 找到
if(!is_object($ctag)){$ctag = $this->dtp->GetTag("list");}
在下面加入
if(!is_object($ctag)){$ctag = $this->dtp->GetTag("listsql");if(is_object($ctag)){$cquery = $ctag->GetAtt("sql");//$cquery = str_replace('~reid~',$this->ReID,$cquery); 这是另一个客户要求的获取url第2个参数才加的。$cquery = preg_replace("/SELECT(.*?)FROM/is", " SELECT count(*) as dd FROM ", $cquery);$cquery = preg_replace("/ORDER(.*?)SC/is", "", $cquery);$row = $this->dsql->GetOne($cquery);if(is_array($row)){$this->TotalResult = $row['dd'];}else{$this->TotalResult = 0;}}}
继续找到
else if($ctag->GetName()=="pagelist")
在它上面加入
else if($ctag->GetName()=="listsql"){$limitstart = ($this->PageNo-1) * $this->PageSize;$row = $this->PageSize;if(trim($ctag->GetInnerText())==""){$InnerText = GetSysTemplets("list_fulllist.htm");}else{$InnerText = trim($ctag->GetInnerText());}$this->dtp->Assign($tagid,$this->GetSqlList($limitstart,$row,$ctag->GetAtt("sql"),$InnerText));}
最后找到
function GetPageListST(
在它上面加入
function GetSqlList($limitstart = 0, $row = 10, $sql = '', $innertext){global $cfg_list_son;$innertext = trim($innertext);if ($innertext == ''){$innertext = GetSysTemplets('list_fulllist.htm');}//处理SQL语句$limitStr = " LIMIT {$limitstart},{$row}";$sql = str_replace('~reid~',$this->ReID,$sql);$this->dsql->SetQuery($sql . $limitStr);$this->dsql->Execute('al');$t2 = ExecTime();//echo $t2-$t1;$sqllist = '';$this->dtp2->LoadSource($innertext);$GLOBALS['autoindex'] = 0;//获取字段while($row = $this->dsql->GetArray("al")){$GLOBALS['autoindex']++;if(is_array($this->dtp2->CTags)){foreach($this->dtp2->CTags as $k=>$ctag){if($ctag->GetName()=='array'){//传递整个数组,在runphp模式中有特殊作用$this->dtp2->Assign($k,$row);}else{if(isset($row[$ctag->GetName()])){$this->dtp2->Assign($k,$row[$ctag->GetName()]);}else{$this->dtp2->Assign($k,'');}}}}$sqllist .= $this->dtp2->GetResult();}//while$t3 = ExecTime();//echo ($t3-$t2);$this->dsql->FreeResult('al');return $sqllist;}