小李SEO博客

网站优化服务

织梦cms实现{dede:sql=""}分页教程

相信很多使用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 PHPif(!is_object($ctag)){$ctag = $this->dtp->GetTag("list");}这一段,在其后添加如下代码:View Code PHP//add by Gump 2011-12-31 https://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 https://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 https://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="https://5loveb.com/[field:ID /].html">[field:post_title /]</a></li>{/dede:listsql}<!--分页-->{dede:pagelist listsize='2' listitem='index pre pageno next end '/}

上一篇:dedecms投票漏洞解决方法 下一篇:dedecms5.7最新版发表评论点不了不能评论了解决方法
织梦cms相关文章阅读
  • 织梦cms修改后台编辑器参数GetEditor方法

    小李网公司介绍织梦cms修改后台编辑器参数GetEditor方法知识,包括dedecms系统编辑器 完美 更换成百度编辑器 - 百度经验,dedecms织梦内容编辑器更换为wangEditor编辑器方法_麦站网.dedecms升级ckeditor为...

  • 织梦cms添加自定义属性让首页显示特定文章

    小李网络公司介绍织梦cms添加自定义属性知识,包括dedecms添加自定义属性让首页显示特定文章-编程脚本学习网,dedecms模板开发dedecms首页被黑了dedecms做论坛网站dedecms行dedecms首页幻灯dedecms首页显...

  • 织梦cms网站rss地图禁止搜索引擎爬行

    小李网络公司介绍织梦cms网站rss地图禁止搜索引擎爬行知识,包括DEDECMS默认生成的rss地图其实是禁止搜索引擎爬行这文件夹的,rss生成器微信公众号rss生成器rsshub订阅源生成rss生成屏蔽搜索引擎禁...

  • 织梦cms调用指定文章ID来调用特定文档

    小李网络公司介绍织梦cms调用指定文章ID来调用特定文档知识,包括怎么调用文档部件如何打开word文档搜索word文档内部文字word怎么改特定的字多个python文件相互调用python调用其他文件的函数py...

  • 织梦cms网站search.php报错解决方法

    小李网络公司介绍织梦cms网站search.php报错解决方法知识,包括DEDECMS plus\search.php on line 44 search.php报错_织梦58,gad line studiofineplusphpsession使用锐界plus和stline悬挂st和st line锐界plus和stline锐界plus和st...

  • 织梦cms留言板增加自定义字段方法

    小李网络公司介绍织梦cms留言板增加自定义字段方法知识,包括织梦dedecms教程织梦留言模块dedecms织梦系统织梦怎么查看留言织梦留言回复dedecms留言板地址dedecms制作留言板织梦留言板插件....

  • 织梦cms获取上下文章链接的方法

    小李网络公司介绍织梦cms获取上下文章链接知识,包括dedecms获取上下文章链接的方法,dedecms获取上下文章链接的方法_dedecms教程_php教程_最模板,dedecms人dedecms文章日期dedecms文章代码dedecms生成文章...

  • 织梦cms自定义文件名用拼音或英文标题方法

    小李网络公司介绍织梦cms自定义文件名用拼音或英文标题知识,包括帝国cms和织梦哪个好dede自定义背景dede自定义链接dede删除自定义dede搜索自定义dede标记教程自定义表单dededede自定义模块dede模板...

  • 织梦cms软件及分类信息采集方法

    小李网络公司介绍织梦cms软件及分类信息采集方法知识,包括信息的分类有哪些类型自己去新华社信息采集个人信息采集是什么意思信息采集系统信息采集软件信息采集的方法有哪些采集信息用...

  • 织梦cms网站问答伪静态的实现方法

    小李网络公司介绍织梦cms网站问答实现伪静态知识.包括Dedecms(织梦)完美实现伪静态的方法_织梦58,nginx实现伪静态nginx 伪静态PHP伪静态dede改成整站静态aspcms伪静态dedecms模板绑域名伪静态html织梦...

  • 织梦cms设置调用新闻在新窗口打开方法

    小李网络公司介绍织梦cms设置调用新闻在新窗口打开方法知识,包括织梦相关文章调用织梦常用调用标签织梦调用代码dedecms调用网站html在新窗口打开网页dedecms怎么调用dedecms调用dedecms调用教程...

  • 织梦cms文章添加字段填栏目id标签调用方法

    小李网络公司介绍织梦cms文章添加字段填栏目id标签调用方法知识,包括织梦相关文章调用dedecms调用网站织梦调用代码dedecms代码调用id字段的数据类型dedecms怎么调用织梦首页调用描述dedecms调用商...

SEO公司排名
 
QQ在线咨询
SEM竞价推广
137-1296-7640
SEO优化外包
137-1296-7640