您当前的位置: 主页 > 优化教程
相信很多使用dedecms的朋友在网上查找关于dede:sql标签进行分页的解决方案时都不尽如人意,尤其是在列表页使用dede:sql调用外部数据(所谓调用外部数据就是指在后台只是创建个空栏目,然后对应的列表模板文件中使用dede:sql指定自定义的数据源,数据源与该栏目本身是没有逻辑关系的,目的是为了让织梦能按照它的规则来帮我们将数据源生成静态文件予以展示)时,我本人也搜索了很多资料,网上的答案都不够完美,有的是直接在模板文件中执行php代码来实现分页,显然此方法无法生成静态文件,有的直接在sql里面指定limit参数,但又无法实现智能分页,织梦官方也没有给出具体的解决方案,在dede论坛有看到织梦核心人物天涯给出的回复是采用自由列表的方法,显然自由列表无法指定外部数据源,最后实在没办法只能自己动手了,首先想到的思路是将dede:list标签进行改造了,熟悉dede的朋友应该知道这个列表页专用标签的工作原理大致是先通过栏目变量id获取到对应的数据源再呈现到页面上来,那么我们就可以让它不仅仅通过栏目变量id还可以通过指定的sql语句来获取数据源了,比如我们可以另外嵌入一个类似{dede:listsql sql=’select * from wp_posts’ pagesize=’10′}的标签来使用。
思路已经有了,接下来我们打开include/arc.listview.class.php这个文件来给它动个小手术吧!
找到:
View Code PHP
if(!is_object($ctag)){$ctag = $this->dtp->GetTag("list");}
这一段,在其后添加如下代码:
View Code PHP
//add by Gump 2011-12-31 http://5loveb.com/if(!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 PHP
if($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 PHP
//add by Gump 2011-12-31 http://5loveb.com/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));}//end
最后找到function GetArcList这个方法,在其后添加一个可以通过传入sql参数获取指定数据源的方法,代码如下:
View Code PHP
//add by Gump 2011-12-31 http://5loveb.com//*** 通过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://5loveb.com/[field:ID /].html">[field:post_title /]</a></li>{/dede:listsql}<!--分页-->{dede:pagelist listsize='2' listitem='index pre pageno next end '/}
 

关键词:实现,dede,sql,分页,教程,相信,很多,使用,ded    标签:
    更多资讯请收藏关注 网站模板(www.1yc.cn)

Pbootcms“提交成功”的提示语修改地址在哪里?Pbootcms留言“提交成功”的提示语修改 2023-08-04
dede织梦"关键字不能小于2个字节"解决办法织梦搜索老是显示关键词不能小于2个字节,这里哪里出现了问题了呢,于是在... 2021-07-22
织梦Dedecms实现列表缩图添加alt锚文本信息的解决方法提出问题:默认的dede默认列表页的缩略图图片缺少ALT属性,对seo... 2021-07-22
dedecms如何在文章内容页添加TAG标签功能我们在使用织梦dedecms的时候应该如何在文章内容页添加TAG标签功... 2021-07-27
DEDECMS修改文章TAG 给TAG加链接 去掉TAG字数限制给TAG加链接: PHP Code复制内容到剪贴板 {dede:tag... 2021-07-30
DEDECMS织梦调用文章内容第一张图片地址的代码{dede:field.body/}调用的是全部文章内容 如果我们只想... 2021-07-22
织梦文章模型文章转入新的自定义模型的方法教大家如何实现织梦文章模型文章转入新的自定义模型 假设以前的栏目为文章... 2021-07-22
织梦生成栏目列表后,前台访问空白解决方法织梦生成栏目列表后,前台访问空白解决方法: 打开 \include\a... 2021-07-22
dedecms教程:如何取消栏目列表页文章标题设置推荐dedecms 织梦模板 的文章标题加粗可以在文章发布的时候设置加粗,... 2021-07-22
织梦限制自定义字段调用字符长度的方法织梦默认的自定义字段调用是没有长度限制的,但有些时候在首页或者列表页调... 2021-07-22
织梦CMS首页和列表页怎么调用自定义字段首页和列表页怎么调用自定义字段呢 这个问题我一直想了很久,在网上也查了... 2021-07-27
如何在DEDECMS网站栏目中增加统计文章数的功能方法在我们在制作dedecms模板的时候,通常会为了让网站美观,要在栏目导... 2021-08-14
织梦内容页怎么调用当前栏目名称的标签织梦DEDECMS内容页调用当前栏目名称的标签 dedecms内容页调... 2021-07-22
dedecms如何调用出访客最近浏览过的文章以下是本人针对上面问题的一个拙劣的笨方法:不对的地方请高手赐教 后台出... 2021-07-27
Dedecms网站地图获取文章列表支持标签调用的方法Dedecms网站地图很好用,但sitemap.htm所调用的标签很有... 2021-07-27
织梦dedecms会员注册时实现邮箱验证通过看到有论坛反应会员注册邮箱验证不能使用,经过这几天的测试,会员注册验证... 2021-07-27
DedeCMS编辑文档“读取附加信息出错"的解决办法今天检查了下网站的旧文章,发现不少是读取附加信息出错!的,浏览内容时就... 2021-07-22
dede文章页面如何显示作者的头像默认只能显示作者用户名dede在文章页面显示作者只是显示用户名,如果要显示作者的头像该怎么实... 2021-07-27
织梦cms自动获取当前系统时间代码我们在用dedecms 织梦模板 建设网站的时候,有时候由于需要要在网... 2021-07-22
dedecms 取消栏目列表页文章标题设置推荐后的加粗如果使用的是 默认的 织梦模板 ,列表页的文章标题不管你是否设置加粗,... 2021-07-27

线
咨询热线:
135-0038-3336
在线客服:
点击这里给我发消息
微信交流:
公司官网: www.1yc.cn