dede栏目分页调取如何实现?

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

在 DedeCMS 中,栏目分页主要分为两种情况:

dede栏目分页调取
(图片来源网络,侵删)
  1. 列表分页:这是最常见的情况,即一个栏目下的文章列表很多,需要分页显示,用户点击“下一页”时,URL 会变成 plus/list.php?tid=栏目ID&PageNo=2 这样的形式。
  2. 子栏目分页:当一个栏目设置为“外部链接”并指向一个“栏目交叉”时,或者在某些特殊模板中,你可能需要对子栏目本身进行分页显示。

下面我们主要讲解最常用的 列表分页,并简要提及子栏目分页。


列表分页调取 (最常用)

这是标准的栏目文章列表分页,实现步骤非常简单,主要依赖于两个核心文件。

步骤 1: 修改列表模板文件 (list_栏目ID.htm)

在后台的“模板管理” -> “默认模板管理”中,找到你需要分页的栏目对应的列表模板文件,通常是 list_栏目ID.htm

在这个模板文件中,你需要使用两个特定的 DedeCMS 标签:{dede:list}{dede:pagelist}

dede栏目分页调取
(图片来源网络,侵删)
  1. {dede:list}:用于循环输出当前页的文章列表。
  2. {dede:pagelist}:用于生成分页导航链接。

示例代码 (list_栏目ID.htm):

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
</head>
<body>
    <h1>{dede:field.title/}</h1>
    <p>{dede:field.description function='htmlspecialchars(@me)'/}</p>
    <!-- 文章列表开始 -->
    {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}
    <!-- 文章列表结束 -->
    <!-- 分页导航开始 -->
    <div class="dede_pages">
        <ul class="pagelist">
            {dede:pagelist listsize='5' listitem='index,pre,next,end,option'}
            {/dede:list}
        </ul>
    </div>
    <!-- 分页导航结束 -->
</body>
</html>

步骤 2: 理解标签参数

{dede:list}

  • pagesize='10':这是最重要的参数,它指定了每页显示的文章数量,你可以根据需要修改这个数字。

{dede:pagelist}

这个标签用于生成一个美观的分页导航栏,可以自定义其显示内容和样式。

dede栏目分页调取
(图片来源网络,侵删)
  • listsize='5':设置显示的页码链接数量。listsize='5' 表示在当前页码的左右两侧各显示 5 个页码(如果页码足够的话)。
  • listitem='...':这个参数用于控制分页导航栏显示哪些部分,多个部分用英文逗号隔开。
    • index:首页
    • pre:上一页
    • pageno:当前页码
    • next:下一页
    • end:尾页
    • option:下拉跳转框
    • info:分页信息,如“共 45 条记录,当前第 1/5 页”

示例:只显示上一页、下一页和页码

{dede:pagelist listitem='pre,next,pageno'}

示例:显示完整的分页导航

{dede:pagelist listitem='index,pre,pageno,next,end,option,info'}

步骤 3: 后台设置 (可选)

分页不生效或样式错乱,可能与后台设置有关。

  1. 检查栏目设置

    • 进入“栏目管理”,编辑你的栏目。
    • 在“栏目内容设置”选项卡中,确保“列表模板”指向了正确的 list_xxx.htm 文件。
    • 检查“文章命名规则”是否正确,这会影响文章链接的生成。
  2. 检查系统参数

    • 进入“系统” -> “系统基本参数” -> “核心设置”。
    • 确保“是否开启_arclist标签底层字段支持”是“是”。
    • 确保“是否使用目录默认主页”等选项符合你的需求。
  3. 生成栏目

    修改完模板后,务必回到“栏目管理”,点击对应栏目右侧的“更新”按钮,选择“更新栏目HTML”和“更新列表页HTML”,让修改生效。


子栏目分页调取 (较少用)

这种需求相对特殊,通常用于在首页或某个特殊页面中,展示某个父栏目的所有子栏目,并对这些子栏目进行分页。

实现方法需要结合 {dede:channel} 和自定义的 PHP 代码,或者使用更灵活的 {dede:sql}

这里我们介绍一种使用 {dede:sql} 的方法,因为它更灵活,能直接控制分页逻辑。

假设场景:我们在首页 (index.htm) 中,要调用 ID 为 2 的栏目下的所有子栏目,每页显示 10 个。

示例代码 (index.htm):

{dede:sql sql='SELECT id,typename,typedir FROM dede_arctype WHERE reid=2 ORDER BY id LIMIT 0,10'}
    <a href="[field:typedir function='str_replace("{cmspath}", "", @me)']/">[field:typename/]</a>
{/dede:sql}
<!-- 这里需要手动编写分页链接,逻辑比较复杂 -->
<!-- 假设总共有 30 个子栏目,每页 10 个,共 3 页 -->
<div class="subcat_pages">
    <a href='/index.php?m=home&c=Index&a=index&subpage=1'>1</a>
    <a href='/index.php?m=home&c=Index&a=index&subpage=2'>2</a>
    <a href='/index.php?m=home&c=Index&a=index&subpage=3'>3</a>
</div>

更完善的实现思路:

  1. 修改首页 (index.htm):让它能够接收一个 subpage 参数。
  2. 编写一个专门的处理文件sublist.php,这个文件负责根据 tid (父栏目ID) 和 subpage (页码) 来查询子栏目并输出。
  3. 在首页调用:使用 {dede:include}{dede:php} 标签来调用这个 sublist.php 文件。

这种方法已经超出了简单模板调用的范畴,需要一定的 PHP 开发能力,对于绝大多数用户来说,标准的 列表分页 已经完全够用。


总结与常见问题

功能 核心标签 关键参数 说明
列表分页 {dede:list}
{dede:pagelist}
pagesize (每页条数)
listsize (显示页码数)
listitem (显示项)
最常用,用于栏目文章列表的分页。
子栏目分页 {dede:sql} 或自定义 PHP SQL LIMIT 子句 较少用,逻辑复杂,通常需要二次开发。

常见问题排查:

  1. 分页不显示

    • 检查 list_xxx.htm 模板中是否正确写入了 {dede:pagelist}
    • 检查后台是否正确生成了列表页。
    • 检查栏目文章数量是否大于 pagesize 的值。
  2. 分页样式错乱

    • {dede:pagelist} 默认输出的是无序列表 <ul> 和列表项 <li>,你需要在自己的 CSS 文件中定义 .dede_pages .pagelist 的样式来美化它。
    • 你也可以使用 listitem='pre,next' 等简化输出,然后用自己写的 HTML 和 CSS 来控制样式。
  3. 点击下一页没反应/404

    检查服务器的 URL 重写(伪静态)规则是否正确,DedeCMS 默认的分页 URL 是动态的,如果你的网站开启了伪静态,可能需要额外的规则来支持分页链接。

希望这份详细的指南能帮助你成功调出 DedeCMS 的栏目分页!

-- 展开阅读全文 --
头像
dede调用留言的代码方法是什么?
« 上一篇 04-23
c语言 doxygen
下一篇 » 04-23

相关文章

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