dede文章列表分页如何实现?

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

DedeCMS 的分页功能非常成熟,主要分为两种场景:

dede文章列表分页
(图片来源网络,侵删)
  1. 栏目列表页分页:这是最常见的情况,比如在首页、资讯列表页、产品列表页等,当文章数量超过每页显示的数量时,自动生成分页导航。
  2. 自定义列表/搜索结果页分页:在自定义的列表页面(如 plus/list.php)或搜索结果页面中,通过特定参数实现分页。

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


栏目列表页分页 (最常用)

这是系统默认就支持的功能,你只需要确保模板标签使用正确即可。

模板标签 ({dede:list})

在栏目列表页的模板文件中(通常是 templets/default/list_栏目ID.htm),你需要使用 {dede:list} 标签来循环输出文章列表。

基本用法:

dede文章列表分页
(图片来源网络,侵删)
{dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
{/dede:list}

标签解析:

  • {dede:list}: 开始一个文章列表循环。
  • pagesize='10': 这是控制每页显示多少篇文章的关键参数,你可以根据需要修改这个数字,pagesize='20'
  • [field:arcurl/]: 文章的链接地址。
  • [field:title/]: 文章的标题。
  • [field:pubdate/]: 文章的发布时间,这里用 function 进行了格式化。
  • {/dede:list}: 循环结束。

分页导航标签 ({dede:pagelist})

{dede:list} 循环结束后,你需要添加分页导航标签,让用户可以点击翻页。

基本用法:

<!-- 文章列表循环 -->
{dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:list}
<!-- 分页导航 -->
<div class="dede_pages">
    <ul class="pagelist">
        {dede:pagelist listsize='4' listitem='index,pre,pageno,next,end,option'}
        {/dede:pagelist}
    </ul>
</div>

标签解析:

dede文章列表分页
(图片来源网络,侵删)
  • {dede:pagelist}: 调用分页导航。
  • listsize='4': 显示页码的数量,当前在第5页,listsize='4' 可能会显示 3,4,5,6,7 这样的页码范围。
  • listitem='...': 定义分页导航栏里显示哪些元素,你可以通过组合这些元素来自定义分页栏的样式。
    • index: 首页
    • pre: 上一页
    • pageno: 页码
    • next: 下一页
    • end: 末页
    • option: 下拉跳转框
    • info: 页面信息 (如:共X页/X条)

后台设置

除了模板标签,你还需要在后台进行一些基本设置:

  1. 进入后台系统 -> 系统基本参数
  2. 找到分页设置:在左侧菜单找到 核心设置
  3. 修改关键参数
    • 列表每页显示条数: 这里是全局默认的每页显示数量,如果你在模板中没有用 pagesize 指定,就会使用这里的值,建议根据你的网站布局设置一个合理的默认值(如10或20)。
    • 动态页尾后缀: 这里设置的是动态分页的文件后缀,通常是 .php

自定义列表页分页

你可能需要一个不依附于任何固定栏目的列表页面,比如一个“热门文章”列表,或者一个带有特定筛选条件的列表,这时你需要使用 plus/list.php 文件。

创建自定义模板文件

templets/你的模板目录/ 下创建一个新的模板文件,hot_articles.htm

hot_articles.htm 模板内容:

{dede:sql sql="SELECT * FROM `dede_archives` WHERE arcrank > -1 ORDER BY click DESC"}
    {dede:list pagesize='15'}
        <li><a href="[field:arcurl/]">[field:title/]</a> - 点击: [field:click/]</li>
    {/dede:list}
    <div class="dede_pages">
        <ul class="pagelist">
            {dede:pagelist listsize='4' listitem='index,pre,pageno,next,end,option'}
            {/dede:pagelist}
        </ul>
    </div>
{/dede:sql}

与场景一的区别:

  • 这里我们使用了 {dede:sql} 标签来直接执行SQL查询,获取你想要的数据。
  • {dede:sql} 标签内部,我们依然可以使用 {dede:list}{dede:pagelist} 来进行列表输出和分页。

创建访问文件

在你的网站根目录(与 index.php 同级)创建一个PHP文件,hot.php

hot.php 文件内容:

<?php
require_once(dirname(__FILE__)."/include/common.inc.php");
require_once(DEDEINC."/arc.listview.class.php");
// 实例化一个列表对象
$lv = new ListView();
// 1. 设置模板的路径和文件名
$lv->SetTemplate($cfg_basedir . $cfg_templets_dir . "/hot_articles.htm");
// 2. 设置SQL查询语句
// 注意:这里的SQL必须包含一个名为 `id` 的字段,因为分页类需要它来计算总数
// SQL末尾必须加上 `limit $startrow, $rownum`
$lv->sourceSql = "SELECT * FROM `dede_archives` WHERE arcrank > -1 ORDER BY click DESC";
// 3. 执行解析和显示
$lv->Display();
?>

代码解析:

  • require_once(...common.inc.php): 引入DedeCMS的核心文件。
  • new ListView(): 创建一个列表视图对象,这个类专门用来处理分页列表。
  • $lv->SetTemplate(...): 指定要使用的模板文件路径。
  • $lv->sourceSql = "...": 这是最关键的一步,设置你的数据查询SQL。
    • 重要:SQL查询的字段列表中,必须包含一个名为 id 的主键或唯一标识字段,否则分页会出错。
    • 你不需要在SQL中写 LIMIT 子句,ListView 类会自动处理。
  • $lv->Display(): 执行查询,解析模板,并最终输出HTML页面。

你通过访问 http://你的网站域名/hot.php 就能看到这个自定义的热门文章列表,并且它支持分页功能。


总结与常见问题

功能点 实现方式 关键点
栏目列表分页 list_栏目ID.htm 模板中使用 {dede:list}{dede:pagelist} pagesize 控制每页数量;listitem 控制分页元素。
自定义列表分页 创建新模板和 .php 访问文件,使用 ListView SQL必须包含 id 字段;ListView 类负责处理分页逻辑。

常见问题排查:

  1. 分页不显示,只有一页?

    • 检查后台 系统基本参数 -> 核心设置 里的 列表每页显示条数 是否大于0。
    • 检查你的数据总数是否真的超过了 每页显示条数
    • 对于自定义列表,检查你的SQL查询是否返回了足够多的数据。
  2. 分页链接是动态的,我想用静态的?

    • DedeCMS 默认生成动态分页(list_1_1.php),要生成静态HTML,你需要使用“HTML静态化”功能。
    • 在后台生成栏目或自定义列表页面时,选择“生成HTML”,系统会为每一页都生成一个静态文件(如 list_index.html, list_2.html 等)。
  3. 分页样式很丑,想自己改?

    • 分页的HTML结构由 {dede:pagelist} 生成,CSS样式在 /templets/default/style/dedecms.css 文件中(或你当前模板的CSS文件里)。
    • 你可以复制 {dede:pagelist} 生成的HTML结构,然后用你自己的CSS类去覆盖和美化它,或者直接修改默认的CSS文件。

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

-- 展开阅读全文 --
头像
织梦导航条背景怎么改?
« 上一篇 04-29
dede如何修改栏目数量?
下一篇 » 04-29

相关文章

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

目录[+]