织梦arclist分页如何实现?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 织梦建站 正文

arclist 是织梦最核心、最常用的列表标签,主要用于在首页、列表页等地方调用文章列表,默认情况下,arclist 是一次性输出所有符合条件的文章,不自带分页功能,要实现分页,我们需要借助织梦的另一个核心标签:pagelist

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

核心思路

实现 arclist 分页的完整思路如下:

  1. 准备模板文件:创建一个用于显示列表的模板文件(list_article.htm)。
  2. 使用 {dede:list}:虽然问题问的是 arclist,但在实际的列表页(如栏目页、搜索页)中,我们更常用的是 {dede:list} 标签,因为它内置了分页功能,我们先讲解这个最标准的方法。
  3. 结合 {dede:pagelist}:在 {dede:list} 循环结束后,使用 {dede:pagelist} 标签来生成分页的导航链接(如上一页、下一页、页码等)。
  4. 后台设置:确保后台的“核心” -> “频道设置”中,对应列表页的“列表命名规则”已正确设置。
  5. (可选) arclist 高级用法:如果确实需要在首页等非列表页用 arclist 实现类似分页的效果,可以通过自定义SQL和分页标签来实现,但这比较复杂,不常用。

标准方法 - 使用 {dede:list} 标签(推荐)

这是织梦官方推荐且最稳定的列表页分页方式。

步骤 1:创建列表模板

在织梦后台的“模板” -> “默认模板管理”中,新建一个模板文件,list_article.htm

步骤 2:编写模板代码

list_article.htm 文件中,输入以下代码:

织梦 arclist 分页
(图片来源网络,侵删)
<!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.position/}</p>
    <ul>
        <!-- {dede:list} 是循环输出文章列表的核心标签,自带分页功能 -->
        {dede:list pagesize='10' titlelen='50'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
        {/dede:list}
    </ul>
    <!-- {dede:pagelist} 是生成分页导航的标签 -->
    <div class="dede_pages">
        <ul>
            <li><span class="pageinfo">共 <strong>{dede:pagelist listsize='0'/}</strong> 页</span></li>
            {dede:pagelist listitem='pre,next,end,option' listsize='5'/}
        </ul>
    </div>
</body>
</html>

代码详解:

  1. {dede:list}:

    • pagesize='10':这是最重要的属性,表示每页显示 10 条文章,你可以根据需要修改这个数字。
    • titlelen='50':表示文章标题最多显示50个字符,超出部分用省略号表示。
    • {dede:list}{/dede:list} 之间的所有内容都会被循环输出,直到达到 pagesize 设定的数量。
  2. {dede:pagelist}:

    • 这个标签必须放在 {dede:list} 循环之外,用来生成分页导航。
    • listitem='pre,next,end,option':定义了分页导航显示哪些元素。
      • pre:上一页
      • next:下一页
      • end:尾页
      • option:下拉跳转页
    • listsize='5':表示当前页码左右两侧各显示5个页码,如果总页数很多,页码会自动被省略号代替。
    • {dede:pagelist listsize='0'/}:这句会直接输出总页数。

步骤 3:后台设置

  1. 进入织梦后台的“核心” -> “频道设置”。
  2. 找到你需要分页的“文章”模型,点击右侧的“更改”按钮。
  3. 在“列表命名规则”这一栏,确保填写了正确的模板,list_{tid}.html,这里的 {tid} 是栏目ID,织梦会自动生成对应的HTML文件,如 list_1.html, list_2.html
  4. 点击“确定保存”。

步骤 4:生成HTML并测试

  1. 进入“生成” -> “更新栏目HTML”或“更新文档HTML”。
  2. 找到你设置了此模板的栏目,点击“开始生成”。
  3. 生成完成后,访问你的栏目页面(http://你的域名/list_1.html)。
  4. 当你显示的文章数量超过 pagesize 设定的值时,页面底部就会出现由 {dede:pagelist} 生成的分页导航。

高级用法 - 在首页用 arclist 实现分页

我们希望在首页也只显示部分文章,并提供“更多”或分页链接,这可以通过 arclist 结合自定义变量和 pagelist 来实现,但需要一些额外的步骤。

注意:这种方法不如 {dede:list} 稳定和灵活,且会增加数据库查询负担,通常只在特殊需求下使用。

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

步骤 1:修改首页模板

在首页模板文件 index.htm 中,找到你使用 arclist 的地方,进行如下修改:

{dede:arclist pagesize='8' titlelen='30'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:arclist}
<!-- 在首页,分页导航通常不直接显示,而是用一个“更多”链接指向栏目列表页 -->
<a href="/list-1.html">查看更多 ></a>

为什么首页不直接用 pagelist 因为 arclist 本身不处理分页逻辑,pagelist 需要知道总页数和当前页数,在首页,我们通常只显示第一页,所以最简单的做法是只显示 pagesize 数量的文章,然后提供一个指向完整列表页的链接。

如果一定要在首页实现分页(不推荐)

如果你确实想在首页实现分页,需要借助PHP和自定义SQL,过程非常复杂,大致如下:

  1. 获取当前页码:通过 PHP 代码获取 page 参数。
  2. 计算偏移量pagesize * (page - 1)
  3. 修改 arclistarclist 本身不支持偏移量,你需要用 {dede:sql} 标签手写SQL查询来替代 arclist
  4. 获取总数:再用一个 {dede:sql} 查询符合条件的文章总数。
  5. 传递给 pagelist:将总数和当前页码通过 global 变量等方式传递给 pagelist

这个过程非常繁琐,且容易出错,强烈建议将完整的列表功能放在栏目页,用 {dede:list} 实现。


常见问题与解决

问题1:分页不显示,或者一直是第1页。

  • 原因:最常见的原因是后台“频道设置”中的“列表命名规则”没有设置,或者设置的模板名称和实际不符,织梦需要生成静态的列表页(如 list_x.html)来支持分页逻辑。
  • 解决:检查“核心” -> “频道设置” -> “文章” -> “列表命名规则”,确保已填写如 list_{tid}.html

问题2:{dede:list} 调用不出来内容。

  • 原因
    1. 模板文件没有正确关联到栏目。
    2. 栏目选择的“列表模板”文件名不正确。
    3. 该栏目下没有发布任何文章。
  • 解决
    1. 进入“栏目管理”,编辑对应栏目,在“列表选项”中选择正确的“列表模板”(如 list_article.htm)。
    2. 确保该栏目有文章。

问题3:pagelist 的样式很丑,如何自定义?

  • 解决pagelist 默认会生成带有 class 的HTML标签,你可以在CSS文件中定义这些 class 的样式。

    • .pagea:普通页码的 <a>
    • .pagea:hover:鼠标悬停时的样式
    • .pageen:当前页码的 <span>
    • .pagebtn:上一页、下一页等按钮的样式

    在你的CSS文件中添加:

    .dede_pages .pagea {
        padding: 5px 10px;
        border: 1px solid #ddd;
        color: #333;
        text-decoration: none;
        margin: 0 2px;
    }
    .dede_pages .pagea:hover {
        background-color: #f0f0f0;
    }
    .dede_pages .pageen {
        padding: 5px 10px;
        border: 1px solid #ff6600;
        background-color: #ff6600;
        color: #fff;
        margin: 0 2px;
    }
用途 是否自带分页 适用场景
{dede:list} 列表页循环输出文章 是(核心功能) 栏目列表页、搜索结果页等所有需要分页的列表场景(推荐)
{dede:arclist} 首页、频道页等调用文章列表 首页推荐、相关文章、热门文章等不需要分页或分页逻辑简单的场景
{dede:pagelist} 生成分页导航链接 独立标签 必须与 {dede:list} 配合使用,放在其循环外部

对于绝大多数情况,请使用 {dede:list} + {dede:pagelist} 的组合来实现 arclist 类似的列表分页功能,这是最标准、最可靠的方法。

-- 展开阅读全文 --
头像
dede文章页如何调用文章短标题?
« 上一篇 01-03
c语言 lastindexof
下一篇 » 01-03

相关文章

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