dede操作{dede:sql=""}实现分页成果的要领

2014-10-02

  信托许多行使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′}的标签来行使,思绪已经有了,接下来我们   -598080707.net

打开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=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;}}}

然后找到:

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

这一段,在厥后添加如下代码:   -598080707.net

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 GetArcList这个要领,在厥后添加一个可以通过传入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;}

总共就添加三段代码,每一段代码根基都参考它紧接着的上面那段原始代码,而无需改变它原本任何一个处所的代码,应该算是较量美满的手术了,接下来在模板文件中的行使要领就跟一开始思绪中所提到的那样,分页标签仍旧相沿原本的,挪用典型:

{dede:listsql sql='select ID,post_title from wp_posts' pagesize='10'}<li><a href="[field:ID /].html">[field:post_title /]</a></li>{/dede:listsql}<!--分页-->{dede:pagelist listsize='2' listitem='index pre pageno next end '/} //留意 将此段代码中598080707.net替代成你网站的地点

注:以上办理方案合用于dedecms5.6版本。

原文地点:

注:想相识更多更好的站长信息资源请上 织梦喜爱者

  • 加入收藏 打赏

    感谢您的支持,我会继续努力的!

    打开微信扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在

    1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
    2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
    3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
    4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!

    无极源码之家 > 建站教程 > 二次开发 dede操作{dede:sql=""}实现分页成果的要领 https://wjymz.cn/Teach/103.html

    相关文章

    评论
    预留评论插件