在 DedeCMS 中,栏目分页主要分为两种情况:
- 列表分页:这是最常见的情况,即一个栏目下的文章列表超过指定数量时,自动分成多页。
- 栏目自身分页:当栏目本身的内容(比如通过“栏目内容模型”编辑的描述)很长时,也需要分页显示。
下面我们分别详细说明这两种情况的实现方法。
列表分页
这是绝大多数用户需要的功能,当你在后台设置好栏目的“列表选项”后,DedeCMS 会自动为你生成分页链接,你只需要在模板文件中调用相应的标签即可。
后台设置
这是分页功能生效的前提,请确保你的栏目设置正确:
- 登录 DedeCMS 后台。
- 进入「核心」 -> 「频道管理」 -> 「栏目管理」。
- 找到你需要设置分页的栏目,点击后面的「修改」。
- 在栏目编辑页面,切换到「高级选项」或「列表选项」选项卡。
- 找到以下关键设置并填写:
- 列表命名规则:这里可以定义生成列表页的文件名,
list_{page}.html。{page}是分页的关键占位符,如果你希望静态化分页,这里一定要有它,如果设置为list.html,则分页将是动态的(如list.php?tid=1&PageNo=2)。 - 列表每页显示数:这是最重要的设置,决定了每一页显示多少篇文章,设置为
10,那么每页就显示 10 篇文章。 - 是否启用目录默认页:通常建议开启,这样列表页的首页会是
index.html,更美观。
- 列表命名规则:这里可以定义生成列表页的文件名,
模板文件调用
设置好后台后,你需要在你栏目的列表模板文件(通常是 list_article.htm 或你自定义的模板)中添加两个分页标签:
{pagelist}:用于显示分页的导航链接(如:首页 1 2 3 下一页 末页)。{pagecount}:用于显示总页数。
示例模板代码 (list_article.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/}</p>
<hr>
<!-- 文章列表开始 -->
<ul>
{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}
</ul>
<!-- 文章列表结束 -->
<hr>
<!-- 分页导航开始 -->
<div class="dede_pages">
<ul class="pagelist">
<li><span class="pageinfo">共 <strong>{pagecount}</strong> 页 / <strong>{recordcount}</strong> 条记录</span></li>
{dede:pagelist listsize='5' listitem='index,pre,pageno,next,end,option'}
</ul>
</div>
<!-- 分页导航结束 -->
</body>
</html>
标签解析:
{dede:list}:这个标签本身就是循环输出文章列表的,它的pagesize属性可以覆盖后台的“列表每页显示数”设置,这里我们写pagesize='10'表示每页显示 10 篇。{pagecount}:输出该栏目的总页数。{dede:pagelist}:生成分页链接。listsize='5':表示当前页码前后显示的页码数量,当前是第 3 页,listsize='2',就会显示1 2 [3] 4 5。listitem='...':用于控制分页导航栏显示哪些元素。index:首页pre:上一页pageno:页码next:下一页end:末页option:跳转下拉框(选择页码直接跳转)info:显示总页数/总记录数(与{pagecount}和{recordcount}类似)
生成与访问
- 更新栏目:在后台「栏目管理」中,对你修改过的栏目点击「更新」。
- 更新HTML:在「生成」菜单中,选择「更新栏目HTML」或「更新所有HTML」,系统会根据你的列表命名规则生成所有的列表页(如
list_1.html,list_2.html...)。 - 访问:通过浏览器访问你的栏目链接,就能看到带有分页功能的文章列表了。
栏目自身分页
如果你的栏目“高级选项” -> “栏目内容”里填写了很长的描述文字,并且希望这些描述也能分页显示,就需要使用这个功能。
后台设置
- 在「栏目管理」中修改你的栏目。
- 切换到「高级选项」选项卡。
- 找到 分页” 选项,将其设置为 “是”。
- 在 ” 的文本框中,输入你的长篇描述,在需要分页的地方,手动输入分页符
<p><strong>nextpage</strong></p>,这个标签就是 DedeCMS 识别分页的标志。
模板文件调用
在你的列表模板文件(如 list_article.htm)中,使用 {dede:field.description/} 标签来调用栏目描述,DedeCMS 会自动将这个标签解析成分页后的内容。
示例模板代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
</head>
<body>
<h1>{dede:field.title/}</h1>
<!-- 栏目描述(带分页)开始 -->
<div class="channel-description">
{dede:field.description/}
</div>
<!-- 栏目描述(带分页)结束 -->
<!-- 栏目描述的分页导航 -->
{dede:pagelist listitem='index,pre,next,end' listsize='3'/}
<hr>
<!-- 文章列表部分... (同上) -->
</body>
</html>
注意:
这里调用栏目描述分页的 {dede:pagelist} 和文章列表的 {dede:pagelist} 是两个不同的分页系统,它们会根据各自的上下文生成正确的分页链接。
常见问题与解决方法 (FAQ)
为什么我的分页是动态的(list.php?tid=1&PageNo=2)而不是静态的(list_2.html)?
原因:在后台「栏目管理」-「高级选项」-「列表命名规则」中,你没有填写 {page} 这个占位符。
解决:将列表命名规则修改为类似 list_{page}.html 的格式,然后重新生成HTML。
为什么 {dede:list} 循环里的文章数量不对?
原因:{dede:list} 的 pagesize 属性可能会覆盖后台的设置,或者后台的“列表每页显示数”设置有误。
解决:检查后台设置,并在模板中明确指定 pagesize,{dede:list pagesize='10'}。
为什么分页样式很丑,或者不显示?
原因:DedeCMS 默认会加载一个名为 dedepage.css 的文件来美化分页,如果你的模板中没有加载这个CSS文件,或者自定义的CSS覆盖了默认样式,就会导致显示异常。
解决:
- 在模板的
<head>部分确保引入了CSS:<link rel="stylesheet" href="{dede:global.cfg_cmspath/}/style/dedepage.css" type="text/css" /> - 或者,你可以自己编写CSS来美化
.dede_pages和.pagelist下的元素。
修改了模板后,分页没有更新怎么办?
原因:DedeCMS 有缓存机制。 解决:在后台「系统」-「SQL命令行工具」-「一键更新缓存」,或者直接在「生成」菜单中重新生成相关的HTML页面。
希望这份详细的指南能帮助你解决 DedeCMS 栏目分页的问题!
