织梦模板用{dede:sql}标签如何实现分页的示例代码

这篇具有很好参考价值的文章主要介绍了织梦模板用{dede:sql}标签如何实现分页的示例代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

近研究了一下织梦CMS系统,看到一篇关于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'}的标签来使用。

OK,思路已经有了,接下来我们打开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;
  }
 }
}
//end

然后找到:

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

这一段,在其后添加如下代码:

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参数获取指定数据源的方法,代码如下:

/**
 * 通过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

总共就添加三段代码,每一段代码基本都参考它紧接着的上面那段原始代码,而无需改变它原来任何一个地方的代码,应该算是比较完美了,接下来在模板文件中的使用方法就跟一开始思路中所提到的那样,分页标签依旧沿用原来的,调用范例:

{dede:listsql sql='select ID,post_title from wp_posts' pagesize='10'}
 
[field:post_title /] {/dede:listsql} {dede:pagelist listsize='2' listitem='index pre pageno next end '/}

注:以上解决方案适用于dedecms5.6-5.7版本。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持yii666。文章来源地址https://www.toymoban.com/news/detail-432812.html

到了这里,关于织梦模板用{dede:sql}标签如何实现分页的示例代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 织梦dede模板内怎么加入php代码的方法示例

    一、模板页面内嵌入php 例如: 最终输出结果为hello world 其实\\\"name\\\"为任意定义的名字,\\\"@me=\\\"后面的值是最终用于输出的值,我就拿它代替echo来用(如果直接用echo,模板生成的时候报错,这就是有所限制的地方,唉)。 二、引用php文件 如果你想在include的文件中使用PHP,则加上

    2024年02月02日
    浏览(51)
  • 详解织梦标签{dede:freelist/}列表调用增加排序方式的代码

    如何使用自由列表标签{dede:freelist/}我这里就不多说了。 当你用到自由列表的时候,会发现排序方式不全。比如我所需要用到 随机排序\\\"rank\\\"和按得分排序\\\"scores\\\"这里就没有。 当然这两个排序dede是有的只是没有列出来,这样就简单了。 找到打开 dede/templets/freelist_add.htm \\\"添加自

    2024年02月02日
    浏览(51)
  • 织梦DedeCMS在{dede:channel}标签前加序列号的方法

    我们在制作织梦模板的时候,经常想实现这样的一个样式功能:在DedeCMS网站导航中都会添加一些样式,这样能让导航看起来很美观大方。但是{dede:channel}标签是不能修改的,想要有一个好看的样式效果,还要修改一些标签。 默认的{dede:channel}调用方法: {dede:channel type=\\\'top\\\' r

    2024年02月03日
    浏览(48)
  • 详解织梦模板DEDE首页列表页AJAX无限加载瀑布流修正版

    最近在学javascript,才慢慢开始读懂JS代码。对HTML前台AJAX加载技术研究了一番,像博客站或者图片站运用AJAX异步无限加载,做成瀑布流,提高用户体验,这是AJAX异步加载的优点。 AJAX异步加载的弊端:属于WEB前端技术,蜘蛛不会抓JS调用的内容,也就是并不利于SEO优化。所以

    2024年02月02日
    浏览(47)
  • 织梦dede调用四级栏目的实现方法

    织梦调用四级子栏目,首先需要修改文件:includetaglibchannel.lib.php,请将以下代码全部复制替换上述文件: rn\\\";if($row=$dsql-GetArray()){$row[\\\'sonids\\\'] = $row[\\\'rel\\\'] = \\\'\\\';if($needRel){$row[\\\'sonids\\\'] = GetSonIds($row[\\\'id\\\'], 0, false);if($row[\\\'sonids\\\']==\\\'\\\') $row[\\\'rel\\\'] = \\\'\\\';else $row[\\\'rel\\\'] = \\\" rel=\\\'dropmenu{$row[\\\'id\\\']}\\\'\\\";

    2024年02月02日
    浏览(88)
  • dede织梦系统会员签到功能实现

    本文织梦yii666技术小编讲解了织梦会员签到增加积分/金币的功能,非插件,安全无毒,需手动修改文件。 毕竟来路不明的插件也不敢乱用,废话不多说,开整... 一、在页面中引入ajax代码: 二、在需要签到按钮的地方增加:   每天 [签到] ,赠送积分! 三、新增系统变量,用来设置签

    2024年02月03日
    浏览(50)
  • DedeCms织梦TAG标签静态生成html,url拼音及分页优化的方法

    DEDECMS自带的TAG标签是动态的,我们可以设置纯静态html,而且针对手机站也做了TAG静态化生成,非常强大,对于SEO提高收录及获取排名非常有好处,今天yii666小编为大家介绍织梦TAG标签伪静态修改方法。无需配置伪静态规则及繁琐的修改教程。 后台TAG生成静态HTML效果图 dede

    2024年02月03日
    浏览(48)
  • dedecms织梦模板栏目列表中添加统计文档数量的标签

    dedecms在栏目列表中添加统计文档数量调用标签,实现的方法还是非常简单的,只需要做一些简单的修改即可实现我们所需要的功能。 方法如下: 打开include/extend.func.php文件,在最后一行?的上面添加以下内容: 下面是我添加的示例代码,供大家参考! 针对arclist与list模板代码

    2024年02月02日
    浏览(59)
  • dede织梦自定义表单提交成功后跳转页面实现方法

    今天我们碰到一位客户,想要完成织梦表单提交后,跳转到一个页面显示:已提交成功,请耐心等待回复。处理到这里,我们想到了这个功能还是很容易完成的,需要对plus/diy.php处理提示页面。 修改方法 默认的是:“发布成功,请等待管理员处理...”,默认跳转页面是网站

    2024年02月03日
    浏览(100)
  • SpringBoot实现分页的三种方式

    一 自己封装Page对象实现 博客链接 二 使用sql实现分页 2.1 场景分析 前段传递给给后台什么参数? 当前页码 currentPage 每页显示条数 pageSize 后台给前端返回什么数据? 当前页数据 List 总记录数 totalCount 2.2 前段代码 2.3 后端代码 PageBean mapper service impl controller 三 使用PageHelper插件

    2024年02月10日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包