dede扩展标签分页如何实现?

99ANYc3cd6
预计阅读时长 20 分钟
位置: 首页 DEDE建站 正文

在 DedeCMS 中,实现分页主要有两种方式:

dede扩展标签分页
(图片来源网络,侵删)
  1. 使用内置的 arclist:这是最简单、最直接的方式,适用于大多数常规列表。
  2. 使用 dede:sql:当需要执行复杂的自定义 SQL 查询时,使用此标签,分页处理会稍微复杂一些,但更灵活。

下面我们分别对这两种方式进行详细说明。


使用 arclist 标签分页 (推荐)

arclist 是 DedeCMS 的核心列表标签,它本身就支持分页功能,使用起来非常方便。

基本语法

arclist 标签的基本结构如下:

{dede:arclist 
    typeid='0' 
    row='10' len='30' 
    orderby='pubdate' 
    orderway='desc'
    pagesize='10'
}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
{/dede:arclist}
<!-- 分页导航代码 -->
<div class="dede_pages">
    <ul class="pagelist">
        {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/}
    </ul>
</div>

关键属性解释

  • typeid: 指定要获取的栏目ID。typeid='0' 表示获取所有栏目的内容。
  • row: 每页显示的文章数量。
  • orderby: 排序方式,如 pubdate (发布时间)、click (点击量)、id (文章ID) 等。
  • orderway: 排序方向,desc (降序) 或 asc (升序)。
  • pagesize: 【分页关键属性】 每页显示的文章数量,这个属性会覆盖 row 属性在分页中的作用。强烈建议使用 pagesize 而不是 row 来控制分页数量,这样逻辑更清晰。

分页标签 {dede:pagelist}

这个标签专门用来生成分页导航链接。

dede扩展标签分页
(图片来源网络,侵删)
  • listitem: 定义要显示的分页元素,常用值包括:
    • index: 首页
    • pre: 上一页
    • next: 下一页
    • end: 末页
    • pageno: 页码
    • info: 页面信息 (如 "共X页,当前第Y页")
  • listsize: 显示的页码数量,listsize='5' 表示当前页码左右各显示2个页码。

完整示例

假设我们要创建一个“最新文章”列表页面,每页显示10篇文章。

模板文件 article_list.htm

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">最新文章列表</title>
</head>
<body>
    <h1>最新文章列表</h1>
    <!-- 使用 arclist 标签调用文章列表 -->
    {dede:arclist typeid='0' pagesize='10' orderby='pubdate' orderway='desc'}
        <div class="article-item">
            <h2><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h2>
            <p class="info">发布时间:[field:pubdate function="MyDate('Y-m-d H:i:s', @me)"]</p>
            <p class="summary">[field:description/]...</p>
        </div>
    {/dede:arclist}
    <!-- 分页导航 -->
    <div class="dede_pages">
        <ul class="pagelist">
            {dede:pagelist listitem="index,pre,next,end,pageno" listsize="5"/}
        </ul>
    </div>
</body>
</html>

创建栏目

  1. 在 DedeCMS 后台,创建一个新栏目(最新文章”)。
  2. 在“高级选项”中,选择“列表模板”,并选择你刚刚创建的 article_list.htm 模板。
  3. 生成这个栏目的列表页面即可看到效果。

使用 dede:sql 标签分页

arclist 无法满足需求时(需要从多个表关联查询数据),就必须使用 dede:sqldede:sql 的分页需要手动处理。

dede扩展标签分页
(图片来源网络,侵删)

基本思路

  1. 获取分页参数:通过 GetPageList() 函数获取分页的 SQL 语句和总记录数。
  2. 执行查询:将分页 SQL 语句嵌入到 dede:sql 标签中,获取当前页的数据。
  3. 显示数据:循环输出 dede:sql 中的字段。
  4. 生成分页导航:使用 {dede:pagelist} 标签,但需要额外配置。

完整示例

假设我们要查询 dede_archives 表中,某个特定分类(比如ID为1的分类)下的所有文章,并分页显示。

模板文件 custom_list.htm

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">自定义SQL分页列表</title>
</head>
<body>
    <h1>自定义SQL分页列表</h1>
    <!-- 第一步:获取分页参数和SQL -->
    {dede:getsql sql="SELECT arc.id, arc.title, arc.pubdate, tp.typedir 
                      FROM dede_archives AS arc 
                      LEFT JOIN dede_arctype AS tp ON arc.typeid = tp.id 
                      WHERE arc.typeid IN (1, 2) AND arc.arcrank > -1"
                      totalnum="totalcount"}
{/dede:getsql}
    <!-- 第二步:使用获取到的分页SQL查询当前页数据 -->
    {dede:sql sql='[field:sql/]'}
        <div class="article-item">
            <h2><a href="/plus/view.php?aid=[field:id/]" title="[field:title/]">[field:title/]</a></h2>
            <p class="info">发布时间:[field:pubdate function="MyDate('Y-m-d H:i:s', @me)"]</p>
            <p>分类目录:[field:typedir/]</p>
        </div>
    {/dede:sql}
    <!-- 第三步:生成分页导航 -->
    <div class="dede_pages">
        <ul class="pagelist">
            {dede:pagelist listitem="index,pre,next,end,pageno" listsize="5"/}
        </ul>
    </div>
</body>
</html>

代码详解

  • {dede:getsql}:

    • sql: 这里写你的完整查询语句。注意,这个查询语句不能包含 LIMIT 分页语句GetPageList 函数会自动处理。
    • totalnum: 将查询到的总记录数赋值给一个名为 totalcount 的变量,这个变量是生成 {dede:pagelist} 的基础。
    • [field:sql/]: 这个变量会包含 GetPageList 函数处理好的、带上了 LIMIT 的 SQL 语句,用于 dede:sql 标签的实际查询。
  • {dede:sql}:

    • sql: 这里引用 [field:sql/] 变量,它就是当前页应该执行的 SQL 查询。
    • 循环体内的 [field:字段名/] 用于输出查询结果中的对应字段。
  • {dede:pagelist}:

    • 在使用了 {dede:getsql} 之后,{dede:pagelist} 就能自动获取到总记录数、每页数量等信息,从而正确生成分页链接。

总结与对比

特性 arclist 标签分页 dede:sql 标签分页
易用性 非常简单,开箱即用,只需设置 pagesize 相对复杂,需要使用 {dede:getsql} 预处理,再嵌套 dede:sql
灵活性 较低,主要用于调用 DedeCMS 已有的数据结构。 非常高,可以执行任意复杂的 SQL 查询,支持多表关联。
适用场景 常规的文章列表、产品列表等。 自定义的数据统计、跨表查询、特殊筛选条件等。
性能 优化的底层查询,性能较好。 性能取决于 SQL 语句的复杂度和数据库索引情况。

推荐做法

  • 优先使用 arclist:对于 90% 的列表页面需求,arclist 足够且高效。
  • 仅在必要时使用 dede:sql:当 arclist 无法满足你的业务逻辑时,再考虑使用 dede:sql 来实现更灵活的自定义分页。

希望这份详细的教程能帮助你完全掌握 DedeCMS 的扩展标签分页!

-- 展开阅读全文 --
头像
readdir如何遍历目录下的所有文件?
« 上一篇 今天
C语言保留字有哪些?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码