dede 文章列表分页

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

第一步:在模板文件中使用分页标签 (最常用)

这是最简单、最常用的方法,适用于绝大多数情况,DedeCMS 提供了非常方便的内置标签 {dede:pagelist} 来实现列表页的分页。

dede 文章列表分页
(图片来源网络,侵删)

模板文件示例

打开你的列表页模板文件,通常位于 /templets/default/ 目录下,list_article.htm

在这个模板文件中,你需要两处代码:

  • 文章列表循环:使用 {dede:list} 标签来循环输出文章。
  • 分页导航:使用 {dede:pagelist} 标签来生成分页链接。
{dede:include filename="head.htm"/}
<!-- 文章列表开始 -->
<div class="listbox">
  <ul class="e2">
    <!-- 
      dede:list 标签用于循环输出文章列表
      pagesize='10' 表示每页显示 10 条文章
    -->
    {dede:list pagesize='10'}
    <li>
      <span class="title">
        <a href="[field:arcurl/]">[field:title/]</a>
      </span>
      <span class="info">([field:pubdate function="MyDate('Y-m-d',@me)"/])</span>
    </li>
    {/dede:list}
  </ul>
</div>
<!-- 分页导航开始 -->
<div class="dede_pages">
  <ul class="pagelist">
    <!-- 
      dede:pagelist 标签用于生成分页导航
      listitem="info,index,end,pre,next,pageno" 定义显示哪些分页元素
      listsize="5" 显示当前页码前后各 5 个页码
    -->
    {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/}
  </ul>
</div>
<!-- 分页导航结束 -->
{dede:include filename="footer.htm"/}

{dede:pagelist} 标签常用参数说明

参数 说明 示例
listitem 设置显示哪些分页元素。info(总数/页数), index(首页), pre(上一页), pageno(页码), next(下一页), end(尾页)。 listitem="info,index,end,pre,next"
listsize 显示的页码数量,即当前页码前后显示的页码个数。 listsize="3"
option 自定义样式,通常用于修改分页链接的 CSS 类名。 option="class='page-link'"

第二步:后台设置列表分页参数 (重要)

仅仅在模板中使用标签是不够的,你还需要在后台设置好相关的参数,否则分页功能无法正常工作。

  1. 登录 DedeCMS 后台
  2. 进入 系统 -> 系统基本参数 -> 核心设置
  3. 找到并修改以下几项关键设置:
    • 列表每页显示条数:这里设置的数值会作为默认值,但你可以在模板的 {dede:list} 标签中通过 pagesize 参数覆盖它。
    • 列表命名规则:确保列表页的命名规则是正确的,通常是 list_{tid}_{page}.html{page} 是页码变量,这对于生成静态化分页页至关重要。
  4. 进入“频道模型”
    • 点击 模型管理”,然后点击你文章所在的模型(通常是“文章”)。
    • 在打开的页面中,找到 “列表模板” 设置项,确保这里填写的模板文件名(如 list_article.htm)与你实际使用的模板文件一致。
    • 同样,在这里也可以设置 “列表每页显示条数”,它会覆盖“系统基本参数”里的全局设置。

第三步:解决常见问题与高级用法

问题1:列表页不显示分页,只显示一页?

原因分析: 最常见的原因是数据库中符合条件的数据量不足,如果你的列表页设置了每页显示10条,而数据库里只有8条符合条件的文章,那么自然就不会有第二页,分页导航也就不会显示。

dede 文章列表分页
(图片来源网络,侵删)

解决方法:

  1. 确认你的文章数量是否足够。
  2. 检查后台的 “系统 -> SQL命令行工具”,执行以下 SQL 语句,可以手动生成一些测试文章:
    INSERT INTO `dede_archives` (`typeid`, `sortrank`, `flag`, `ismake`, `channel`, `arcrank`, `click`, `money`, `title`, `shorttitle`, `color`, `writer`, `source`, `litpic`, `pubdate`, `senddate`, `mid`, `keywords`, `lastpost`, `scores`, `goodpost`, `badpost`, `voteid`, `notpost`, `description`, `filename`, `dutyadmin`, `tackid`, `mtype`, `userip`) VALUES (1, 100, 'c', 1, 1, 0, 0, 0, '测试文章标题', '', '', 'admin', '未知', '', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), 1, '', 0, 0, 0, 0, 0, 0, '这是测试文章的内容摘要。', '', 1, 0, '', '127.0.0.1');

    注意:dede_archives 是默认的前缀,如果你的数据库前缀不是 dede_,请自行修改。

问题2:分页样式不好看,如何自定义?

你可以通过修改 CSS 文件来美化分页样式,分页导航的 HTML 结构通常是固定的,你可以通过为其添加自定义 CSS 类来实现。

方法:

dede 文章列表分页
(图片来源网络,侵删)
  1. 修改模板标签:在 {dede:pagelist} 标签中添加 option 参数,指定一个 CSS 类。

    {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5" option="class='page-link'"/}
  2. 编写 CSS 样式:在你的 CSS 文件(如 /templets/default/style/dedecms.css)中,为这个类编写样式。

    /* 为分页链接添加基本样式 */
    .page-link {
      display: inline-block;
      padding: 5px 10px;
      margin: 0 5px;
      border: 1px solid #ddd;
      border-radius: 3px;
      text-decoration: none;
      color: #333;
    }
    /* 鼠标悬停效果 */
    .page-link:hover {
      background-color: #f8f8f8;
      border-color: #ccc;
    }
    /* 当前页码样式 */
    .page-link.current {
      background-color: #007bff;
      color: white;
      border-color: #007bff;
    }
    /* 禁用链接(如首页/上一页在第一页时)样式 */
    .page-link.disabled {
      color: #999;
      cursor: not-allowed;
      border-color: #eee;
    }

    注意:DedeCMS 默认生成的分页类名可能不同,你需要用浏览器“审查元素”功能查看实际的 HTML 结构和类名,然后针对性地编写 CSS。

高级用法:自定义调用并分页 (不使用默认的列表页)

你可能需要在一个自定义的页面(比如首页)调用某个分类下的文章并实现分页,这时,你不能使用 {dede:list},而应该使用 {dedarclist}

示例:在首页调用“技术分享”分类(ID=1)的文章,并分页,每页5条。

  1. 创建首页模板:确保你的首页模板文件(如 /templets/default/index.htm)存在。

  2. 使用 {dede:arclist}:

    <!-- 在首页模板的适当位置添加以下代码 -->
    <div class="home-article-list">
      <h3>技术分享</h3>
      <ul>
        {dede:arclist typeid='1' pagesize='5'}
        <li>
          <a href="[field:arcurl/]">[field:title/]</a>
          <span class="date">([field:pubdate function="MyDate('Y-m-d',@me)"/])</span>
        </li>
        {/dede:arclist}
      </ul>
      <!-- 关键:使用 {pagelist} 标签 -->
      <div class="dede_pages">
        <ul class="pagelist">
          {pagelist listitem="info,index,end,pre,next,pageno" listsize="3"/}
        </ul>
      </div>
    </div>
    • typeid='1':指定调用分类ID为1的文章。
    • pagesize='5':指定每页显示5条。
    • {pagelist}:注意,在 {dede:arclist} 标签内部,分页标签是 {pagelist},而不是 {dede:pagelist}

第四步:二次开发与底层原理 (进阶)

如果你对默认的分页逻辑不满意,或者需要更复杂的功能,就需要修改 PHP 文件。

找到核心分页文件

DedeCMS 的分页逻辑主要在以下文件中:

  • /include/arc.listview.class.php:这是最核心的列表页分页处理类,当你访问一个列表页(如 list_1_2.html)时,系统会调用这个类来处理数据、生成分页和缓存。

修改分页逻辑

如果你想在分页链接中添加自定义参数(?from=nav),你可以修改这个文件。

  1. 打开 arc.listview.class.php

  2. 找到 GetPageListST 函数(或其他类似名称的分页生成函数)。

  3. 在生成链接的地方,修改 $purl 的值,在 $purl 后面拼接你的参数。

    // 原始代码可能类似这样
    $purl = $this->GetCurUrl();
    // 修改后,添加自定义参数
    $purl = $this->GetCurUrl() . "?from=nav";

    注意:直接修改核心文件在系统升级后可能会被覆盖,建议做好备份或通过二次开发的方式实现。

修改分页样式 (底层)

如果你发现分页的 HTML 结构非常顽固,难以用 CSS 修改,可以直接修改 arc.listview.class.php 中生成分页 HTML 的代码,找到生成 <a> 标签的部分,直接修改其 class 属性。

场景 解决方案
常规列表页分页 list_xxx.htm 模板中使用 {dede:list} + {dede:pagelist} 标签,并确保后台参数设置正确。
自定义页面调用并分页 使用 {dede:arclist} + {pagelist} 标签组合。
修改分页样式 通过 option 参数指定 CSS 类,然后在 CSS 文件中编写样式,或使用浏览器审查元素找到具体类名。
分页不显示 检查数据量是否足够,检查后台的列表每页显示条数设置。
高级自定义 修改 /include/arc.listview.class.php 文件,这是最根本但风险最高的方法。

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

-- 展开阅读全文 --
头像
dede 软件大小标签
« 上一篇 今天
织梦如何调用当前栏目ID?
下一篇 » 今天

相关文章

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