欢迎来到酱油妹!织梦模板,dede模板下载,织梦cms模板,免费网站模板下载站

酱油妹

织梦DEDE模板中采用{dede:sql=””}达成分页功能详解

企业模板

相信大量采用织梦DEDE的朋友在网上查找关于dede:sql标签进行分页的解决方法时都不尽如人意,尤其是在列表页采用dede:sql调用外部数据(所谓调用外部数据就是指在后台只是创建个空栏目,然后对应的列表模板文件中采用dede:sql指定自概念的数据源,数据源与该栏目本身是没有逻辑关系的,目的是为了让织梦DEDE能根据它的规则来帮大家将数据源生成静态文件予以展示)时,我本人也搜索了大量资料,网上的答案都不够完美,有的是直接在模板文件中实行php代码来达成分页,显然此办法没办法生成静态文件,有的直接在sql里面指定limit参数,但又没办法达成智能分页,织梦DEDE官方也没有给出具体的解决方法,在dede论坛有看到织梦DEDE核心人物天涯给出的回复是使用自由列表的办法,显然自由列表没办法指定外部数据源,最后实在无法只能自身动手了,第一想到的思路是将dede:list标签进行改造了,熟知dede的朋友应该知道这个列表页专用标签的工作原理大致是先通过栏目变量id获得到对应的数据源再呈现到页面上来,那样大家就可以让它不仅仅通过栏目变量id还可以通过指定的sql语句来获得数据源了,譬如大家可以另外嵌入一个类似{dede:listsql sql=’select * from wp_posts’ pagesize=’10′}的标签来采用。思路已经有了,紧接着大家打开include/arc.listview.class.php这个文件来给它动个小手术吧!找到:View Code PHPif(!is_object($ctag)){$ctag = $this->dtp->GetTag(“list”);}这一段,在其后添加如下代码:View Code PHPif(!is_object($ctag)){$ctag = $this->dtp->GetTag(“listsql”);if (is_object($ctag)){$cquery = $ctag->GetAtt(“sql”);$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;}}}//end然后找到:View Code PHPif($ctag->GetName()==”list”){$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->GetArcList($limitstart,$row,$ctag->GetAtt(“col”),$ctag->GetAtt(“titlelen”),$ctag->GetAtt(“infolen”),$ctag->GetAtt(“imgwidth”),$ctag->GetAtt(“imgheight”),$ctag->GetAtt(“listtype”),$ctag->GetAtt(“orderby”),$InnerText,$ctag->GetAtt(“tablewidth”),$ismake,$ctag->GetAtt(“orderway”)));}这一段,在其后添加如下代码:View Code PHPelse 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));}//end最后找到function GetArcList这个办法,在其后添加一个可以通过传入sql参数获得指定数据源的办法,代码如下:View Code PHP// 通过listsql标签中sql属性传入的参数来获得一个单列的文档列表* */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}”;$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;}//end总共就添加三段代码,每一段代码基本都参考它紧接着的上面那段原始代码,而无需改变它原来任何一个地方的代码,应该算是比较完美的手术了,紧接着在模板文件中的怎么使用就跟刚开始思路中所提到的那样,分页标签依旧沿用原来的,调用范例:View Code HTML{dede:listsql sql=’select ID,post_title from wp_posts’ pagesize=’10′}<li><a href=”http://www.zhimenghze.com /[field:ID /].html”>[field:post_title /]</a></li>{/dede:listsql}<!–分页–>{dede:pagelist listsize=’2′ listitem=’index pre pageno next end ‘/}注:以上解决方法适用于织梦DEDE5.6版本。该文章仅能供对php程序有所有解的服务学习 一下 看起来很乱 。(责任编辑:酱油妹)


希望以上内容可以解决您的问题!
如有其他问题欢迎大家一起交流学习!
作者:酱油妹 来源:互联网 关注: 时间:2020-07-31 06:26
版权声明:凡注明来源为www.jiangyoumei.com的均为本站原创,转载请注明来源。
本文网址:http://www.jiangyoumei.com/jiaocheng/jiqiao/20200731/8663.html
►凡本站提供教程均已验证教程的准确性。
►为提高用户在织梦后台添加栏目的灵活性(可随意添加/删除栏目),并保持(管理后台添加/删除栏目)与前端网站栏目的一致,本站模板中栏目均未固定,用户直接搜索typeid=''并替换''中的数字为所需栏目id即可。
►本站提供各种类型织梦模板!希望在这里找到喜欢的。下载本站模板,用户直接替换相关文字和图片即可。
►本站仅提供织梦模板即(DEDE模板),(除另外说明)均不带织梦安装程序及数据,用户直接覆盖默认模板即可。
►本站所有资源(包括源码、模板、插件等)仅供学习与参考,请勿用于商业用途。
►如有其他问题,请加网站客服QQ(375750496)进行交流。
相关织梦教程
在线客服

织梦模板 整站模板 新手教程 使用技巧