dede arclist分页如何实现?

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

arclist 是 DedeCMS 中最核心、最常用的列表标签,用于获取文章列表,它本身不直接生成“上一页/下一页”这样的分页导航,而是需要结合一个专门的分页标签 {dede:pagelist} 来实现。

dede arclist 分页
(图片来源网络,侵删)

下面我将从 基本原理完整代码示例常用参数详解 以及 常见问题 四个方面来为你详细说明。


基本原理

arclist 分页的原理可以概括为以下三步:

  1. 使用 arclist 获取数据:在模板中,你需要用 arclist 标签来调用你想要的列表内容,这个标签必须放在一个列表循环 ({dede:list}{dede:arclist} 内部) 中。
  2. 开启 arclist 的分页功能:通过给 arclist 标签添加一个关键参数 pagesize(每页显示条数),系统就知道你需要分页了,DedeCMS 会自动在底层处理分页逻辑。
  3. 使用 pagelist 标签显示分页导航:在 arclist 列表之后,使用 {dede:pagelist} 标签来生成具体的分页链接,如“首页”、“上一页”、“1 2 3 4”、“下一页”、“末页”等。

重要提示arclist 分页功能通常在 列表页模板 (list_article.htm) 中使用,而不是在首页 (index.htm)。


完整代码示例

这是一个在列表页模板 (list_article.htm) 中实现 arclist 分页的完整代码结构。

dede arclist 分页
(图片来源网络,侵删)
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
    <meta name="description" content="{dede:field.description function='html2text(@me)'/}">
    <meta name="keywords" content="{dede:field.keywords/}">
</head>
<body>
    <h1>{dede:field.title/}</h1>
    <p>当前位置:{dede:field.position/}</p>
    <!-- 1. arclist 列表部分 -->
    <div class="article-list">
        {dede:arclist 
            typeid='1' 
            titlelen='30' 
            row='10' 
            pagesize='10'
        }
        <div class="item">
            <a href="[field:arcurl/]">[field:title/]</a>
            <span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </div>
        {/dede:arclist}
    </div>
    <!-- 2. pagelist 分页导航部分 -->
    <div class="page-nav">
        <ul>
            {dede:pagelist listsize='4' listitem='info,index,pre,next,pageno,end'}
            <!-- 这里的 listitem 参数控制显示哪些分页元素 -->
            {/dede:pagelist}
        </ul>
    </div>
</body>
</html>

代码解释:

  • {dede:arclist ...}: 这是调用文章列表的主标签。
    • typeid='1': 指定栏目ID,只显示此栏目下的文章,如果要在当前栏目及其子栏目下显示,可以用 typeid='top' 或留空(但留空可能会影响性能)。
    • row='10': 这个参数在这里会被 pagesize 覆盖,所以可以省略或保持一致。
    • pagesize='10': 这是实现分页的核心参数,它告诉系统每页显示 10 条记录。
  • {dede:pagelist ...}: 这是生成分页导航的标签。
    • 它必须紧跟在 {dede:arclist} 标签的后面。
    • listsize='4': 设置页码显示的个数,如果当前在第 5 页,listsize='4' 可能会显示 3,4,5,64,5,6,7 这样的页码链接。
    • listitem='...': 控制分页导航显示哪些元素,非常关键,我们会在下一节详细说明。

arclistpagelist 常用参数详解

arclist 标签关键参数

参数 说明 示例
typeid 栏目ID,多个用逗号隔开。 typeid='1,3'
pagesize 分页核心:设置每页显示的文章数量。 pagesize='8'
row 显示文章的总数(在分页时,此参数会被 pagesize 覆盖)。 row='20'
infolen 内容简介长度。 infolen='100'
orderway 排序方式。desc 为降序(默认),asc 为升序。 orderway='asc'
channelid 指定模型ID,默认为文章(1)。 channelid='1'

pagelist 标签关键参数

参数 说明 示例
listitem 控制显示哪些分页项,多个用逗号隔开,常用值:
- index: 首页
- pre: 上一页
- next: 下一页
- last: 末页
- pageno: 页码
- info: 分页信息(如“共5页”)
listitem='index,pre,next,pageno'
listsize 页码列表的显示大小,即显示多少个页码链接。 listsize='5'
option 设置样式。option='style=你的样式名',然后在CSS中定义 .你的样式名 a 等。 option='style=my-page'

常见问题与技巧

问题:为什么我的分页不显示?

  • 原因1:未使用 pagesize 参数。
    • 解决:检查你的 {dede:arclist} 标签,确保添加了 pagesize='X' 参数。
  • 原因2:pagelist 标签位置错误或遗漏。
    • 解决:确保 {dede:pagelist} 标签紧跟在 {dede:arclist} 标签的闭合标签 {/dede:arclist} 之后。
  • 原因3:列表内容为空。
    • 解决:检查你指定的 typeid 是否正确,以及该栏目下是否有文章。
  • 原因4:使用了错误的列表标签。
    • 解决:确认你使用的是 {dede:arclist},而不是 {dede:list}{dede:list} 是用于“自定义列表”的分页,其分页方式不同。

技巧:如何自定义分页导航的样式?

pagelist 生成的 HTML 结构是固定的,我们可以通过 CSS 来美化它。

pagelist 默认生成的 HTML 结构大致如下:

<div class="dede_pages">
    <ul>
        <span class="pageinfo">共 <strong>4</strong> 页</span>
        <li><a href="...">首页</a></li>
        <li><a href="...">上一页</a></li>
        <li><a href="...">1</a></li>
        <li class="thisclass"><a href="...">2</a></li>
        <li><a href="...">3</a></li>
        <li><a href="...">下一页</a></li>
        <li><a href="...">末页</a></li>
    </ul>
</div>

你可以通过以下 CSS 来美化它:

dede arclist 分页
(图片来源网络,侵删)
/* 分页容器样式 */
.dede_pages {
    text-align: center;
    margin: 20px 0;
}
.dede_pages ul {
    display: inline-block; /* 让ul横向排列 */
    list-style: none;
    padding: 0;
    margin: 0;
}
.dede_pages li {
    float: left; /* 横向排列 */
    margin: 0 5px;
}
.dede_pages a, .dede_pages span {
    display: block;
    padding: 5px 10px;
    border: 1px solid #ddd;
    border-radius: 3px;
    text-decoration: none;
    color: #333;
}
.dede_pages a:hover {
    background-color: #f0f0f0;
}
/* 当前页的样式 */
.dede_pages .thisclass a {
    background-color: #007bff;
    color: #fff;
    border-color: #007bff;
}
/* 禁用链接的样式(如首页在第一页时) */
.dede_pages a.disabled {
    color: #999;
    cursor: not-allowed;
    border-color: #eee;
}

技巧:如何获取“总页数”和“当前页码”?

有时你可能想在页面上显示“当前第 X 页,共 Y 页”这样的信息。pagelistinfo 项可以显示“共 X 页”,但“当前页”需要通过其他方式获取。

可以使用 {dede:field pagelist/} 结合 PHP 代码来实现,但更简单的方法是利用 pagelist 自带的变量。

{dede:pagelist} 标签内部,可以使用以下变量:

  • [field:nownum/]: 当前页码
  • [field:totalnum/]: 总记录数
  • [field:totalpage/]: 总页数

示例:

<div class="page-info">
    当前第 <strong>[field:nownum/]</strong> 页, 
    共 <strong>[field:totalpage/]</strong> 页, 
    共有 <strong>[field:totalnum/]</strong> 条记录
</div>
<div class="page-nav">
    {dede:pagelist listitem='index,pre,next,end,pageno' listsize='4'/}
</div>

这样你就可以非常灵活地控制分页显示了。

希望这份详细的指南能帮助你完全掌握 DedeCMS arclist 的分页功能!

-- 展开阅读全文 --
头像
dede list 自定义字段
« 上一篇 01-09
C语言char如何转double?
下一篇 » 01-09
取消
微信二维码
支付宝二维码

目录[+]