最简单、最常用的方法:使用 {dede:prenext}
这个标签是织梦专门为文章详情页设计的,可以自动获取当前文章的上一篇和下一篇,并生成链接。
(图片来源网络,侵删)
页模板中使用
在你的文章详情页模板文件中(通常是 article_article.htm),将 {dede:prenext} 标签插入到你希望显示“上一篇/下一篇”的位置,比如文章内容的下方。
示例代码:
{dede:field.body/}
<div class="prenext">
<div class="prenext_left">
{dede:prenext get='pre'/}
</div>
<div class="prenext_right">
{dede:prenext get='next'/}
</div>
</div>
代码解释:
{dede:prenext}: 核心标签。
get='pre': 获取并显示上一篇文章。
get='next': 获取并显示下一篇文章。
- 上面的代码会生成类似这样的HTML结构:
<div class="prenext">
<div class="prenext_left">
<a href="/plus/view.php?aid=123">上一篇:这是上一篇文章的标题</a>
</div>
<div class="prenext_right">
<a href="/plus/view.php?aid=125">下一篇:这是下一篇文章的标题</a>
</div>
</div>
{dede:prenext} 标签的完整参数说明
{dede:prenext} 标签本身非常灵活,可以通过参数来控制显示内容。
(图片来源网络,侵删)
-
get: 指定获取上一篇还是下一篇。
get='pre' 或 get='prev': 上一篇
get='next': 下一篇
get='pre, next' (默认): 同时显示上一篇和下一篇
-
titlelen: 标题长度限制。
- 示例:
{dede:prenext titlelen='30'}限制在30个字符以内,超出部分用省略号表示。
-
innertext: 自定义标签内的显示文本。
- 这是非常有用的一个参数,可以让你完全自定义链接的文本。
- 示例:
{dede:prenext get='pre' innertext='« 返回列表'},这会显示一个返回列表的链接,而不是上一篇的标题。
综合示例:
<div class="article_page">
<!-- 同时显示上一篇和下一篇,标题长度限制为20 -->
{dede:prenext titlelen='20' /}
<hr>
<!-- 分别控制上一篇和下一篇的样式 -->
<div class="page-nav">
<span class="prev">
{dede:prenext get='pre' titlelen='30' innertext='« 上一篇:[field:title]'/}
</span>
<span class="next">
{dede:prenext get='next' titlelen='30' innertext='下一篇:[field:title] »'/}
</span>
</div>
</div>
高级用法与自定义
如果你需要更精细的控制,或者想实现一些特殊效果(比如没有上一篇/下一篇时显示特定文字),可以使用 dede:arclist 标签来模拟实现。
使用 {dede:arclist} 实现上一篇/下一篇
这种方法更灵活,可以结合其他字段(如缩略图、发布时间等)一起显示。
实现上一篇
{dede:arclist row='1' titlelen='30' orderby='id' orderway='desc'}
<div class="pre-article">
<a href="[field:arcurl/]">上一篇:[field:title/]</a>
</div>
{/dede:arclist}
参数解释:
row='1': 只获取一条记录。
orderby='id': 按 ID 排序。
orderway='desc': 降序排列(即 ID 比当前文章小的上一篇),如果要找下一篇,这里需要改成 orderway='asc'。
实现下一篇
{dede:arclist row='1' titlelen='30' orderby='id' orderway='asc'}
<div class="next-article">
<a href="[field:arcurl/]">下一篇:[field:title/]</a>
</div>
{/dede:arclist}
结合 {dede:php} 实现更智能的逻辑(没有文章时显示提示)
将上述 arclist 方法放在一个PHP判断中,可以处理没有上一篇或下一篇的情况。
<div class="prenext">
<!-- 上一篇 -->
<div class="pre">
{dede:php}
$preRow = GetPreNextArc($aid, 'pre');
if($preRow){
echo '<a href="'.$preRow['arcurl'].'">上一篇:'.$preRow['title'].'</a>';
} else {
echo '已经是第一篇文章了';
}
{/dede:php}
</div>
<!-- 下一篇 -->
<div class="next">
{dede:php}
$nextRow = GetPreNextArc($aid, 'next');
if($nextRow){
echo '<a href="'.$nextRow['arcurl'].'">下一篇:'.$nextRow['title'].'</a>';
} else {
echo '已经是最后一篇文章了';
}
{/dede:php}
</div>
</div>
代码解释:
GetPreNextArc($aid, 'pre') 是织梦的一个核心函数,可以直接获取上一篇或下一篇文章的完整信息数组。
$aid 是当前文章的ID,在文章详情页模板中可以直接使用。
- 通过
if($preRow) 判断是否存在上一篇,如果不存在则显示提示文字。
常见问题与解决方法
问题:上一篇/下一篇链接不正确,或者跳转到别的栏目。
- 原因:通常是因为文章的“栏目归属”设置有问题,织梦的上一篇/下一篇逻辑是基于同一栏目内的文章ID顺序的,如果一篇文章被错误地归类到了多个栏目(通过“选择其他栏目”功能),可能会导致逻辑混乱。
- 解决方法:
- 检查文章编辑页面的“栏目选择”,确保它只属于主栏目,而不是多个顶级栏目。
- 检查文章是否被正确发布到了它所属的栏目下。
问题:修改了模板后,上一篇/下一篇没有更新。
- 原因:织梦模板有缓存。
- 解决方法:
- 登录织梦后台。
- 进入 “系统” -> “一键更新网站”。
- 选择“更新所有文档”,然后点击“开始执行”,执行完成后,缓存就会更新。
问题:想在首页或列表页调用某篇文章的上一篇/下一篇。
- 说明:这是不推荐的,因为“上一篇/下一篇”这个概念是相对于当前正在阅读的文章而言的,在列表页,用户没有“当前文章”,所以这个逻辑不成立。
- 替代方案:如果你想在列表页显示“相关文章”,应该使用
{dede:likearticle} 标签,它可以根据关键词、栏目等信息来调用相关文章。
需求场景
推荐方法
优点
缺点
文章详情页,常规显示
{dede:prenext}
最简单、最原生,系统自动处理
自由度相对较低
文章详情页,需要高度自定义样式或内容
{dede:arclist} 或 GetPreNextArc()
灵活性极高,可结合任何字段
代码稍复杂,需要手动处理“不存在”的情况
列表页或首页
不适用
-
逻辑上不成立,应使用 {dede:likearticle}
对于绝大多数情况,直接使用 {dede:prenext} 标签是最佳选择,简单高效,只有在需要非常特殊的功能时,才考虑使用更复杂的 arclist 或 PHP 代码方法。
这个标签是织梦专门为文章详情页设计的,可以自动获取当前文章的上一篇和下一篇,并生成链接。

(图片来源网络,侵删)
页模板中使用
在你的文章详情页模板文件中(通常是 article_article.htm),将 {dede:prenext} 标签插入到你希望显示“上一篇/下一篇”的位置,比如文章内容的下方。
示例代码:
{dede:field.body/}
<div class="prenext">
<div class="prenext_left">
{dede:prenext get='pre'/}
</div>
<div class="prenext_right">
{dede:prenext get='next'/}
</div>
</div>
代码解释:
{dede:prenext}: 核心标签。get='pre': 获取并显示上一篇文章。get='next': 获取并显示下一篇文章。- 上面的代码会生成类似这样的HTML结构:
<div class="prenext"> <div class="prenext_left"> <a href="/plus/view.php?aid=123">上一篇:这是上一篇文章的标题</a> </div> <div class="prenext_right"> <a href="/plus/view.php?aid=125">下一篇:这是下一篇文章的标题</a> </div> </div>
{dede:prenext} 标签的完整参数说明
{dede:prenext} 标签本身非常灵活,可以通过参数来控制显示内容。

(图片来源网络,侵删)
-
get: 指定获取上一篇还是下一篇。get='pre'或get='prev': 上一篇get='next': 下一篇get='pre, next'(默认): 同时显示上一篇和下一篇
-
titlelen: 标题长度限制。- 示例:
{dede:prenext titlelen='30'}限制在30个字符以内,超出部分用省略号表示。
- 示例:
-
innertext: 自定义标签内的显示文本。- 这是非常有用的一个参数,可以让你完全自定义链接的文本。
- 示例:
{dede:prenext get='pre' innertext='« 返回列表'},这会显示一个返回列表的链接,而不是上一篇的标题。
综合示例:
<div class="article_page">
<!-- 同时显示上一篇和下一篇,标题长度限制为20 -->
{dede:prenext titlelen='20' /}
<hr>
<!-- 分别控制上一篇和下一篇的样式 -->
<div class="page-nav">
<span class="prev">
{dede:prenext get='pre' titlelen='30' innertext='« 上一篇:[field:title]'/}
</span>
<span class="next">
{dede:prenext get='next' titlelen='30' innertext='下一篇:[field:title] »'/}
</span>
</div>
</div>
高级用法与自定义
如果你需要更精细的控制,或者想实现一些特殊效果(比如没有上一篇/下一篇时显示特定文字),可以使用 dede:arclist 标签来模拟实现。
使用 {dede:arclist} 实现上一篇/下一篇
这种方法更灵活,可以结合其他字段(如缩略图、发布时间等)一起显示。
实现上一篇
{dede:arclist row='1' titlelen='30' orderby='id' orderway='desc'}
<div class="pre-article">
<a href="[field:arcurl/]">上一篇:[field:title/]</a>
</div>
{/dede:arclist}
参数解释:
row='1': 只获取一条记录。orderby='id': 按 ID 排序。orderway='desc': 降序排列(即 ID 比当前文章小的上一篇),如果要找下一篇,这里需要改成orderway='asc'。
实现下一篇
{dede:arclist row='1' titlelen='30' orderby='id' orderway='asc'}
<div class="next-article">
<a href="[field:arcurl/]">下一篇:[field:title/]</a>
</div>
{/dede:arclist}
结合 {dede:php} 实现更智能的逻辑(没有文章时显示提示)
将上述 arclist 方法放在一个PHP判断中,可以处理没有上一篇或下一篇的情况。
<div class="prenext">
<!-- 上一篇 -->
<div class="pre">
{dede:php}
$preRow = GetPreNextArc($aid, 'pre');
if($preRow){
echo '<a href="'.$preRow['arcurl'].'">上一篇:'.$preRow['title'].'</a>';
} else {
echo '已经是第一篇文章了';
}
{/dede:php}
</div>
<!-- 下一篇 -->
<div class="next">
{dede:php}
$nextRow = GetPreNextArc($aid, 'next');
if($nextRow){
echo '<a href="'.$nextRow['arcurl'].'">下一篇:'.$nextRow['title'].'</a>';
} else {
echo '已经是最后一篇文章了';
}
{/dede:php}
</div>
</div>
代码解释:
GetPreNextArc($aid, 'pre')是织梦的一个核心函数,可以直接获取上一篇或下一篇文章的完整信息数组。$aid是当前文章的ID,在文章详情页模板中可以直接使用。- 通过
if($preRow)判断是否存在上一篇,如果不存在则显示提示文字。
常见问题与解决方法
问题:上一篇/下一篇链接不正确,或者跳转到别的栏目。
- 原因:通常是因为文章的“栏目归属”设置有问题,织梦的上一篇/下一篇逻辑是基于同一栏目内的文章ID顺序的,如果一篇文章被错误地归类到了多个栏目(通过“选择其他栏目”功能),可能会导致逻辑混乱。
- 解决方法:
- 检查文章编辑页面的“栏目选择”,确保它只属于主栏目,而不是多个顶级栏目。
- 检查文章是否被正确发布到了它所属的栏目下。
问题:修改了模板后,上一篇/下一篇没有更新。
- 原因:织梦模板有缓存。
- 解决方法:
- 登录织梦后台。
- 进入 “系统” -> “一键更新网站”。
- 选择“更新所有文档”,然后点击“开始执行”,执行完成后,缓存就会更新。
问题:想在首页或列表页调用某篇文章的上一篇/下一篇。
- 说明:这是不推荐的,因为“上一篇/下一篇”这个概念是相对于当前正在阅读的文章而言的,在列表页,用户没有“当前文章”,所以这个逻辑不成立。
- 替代方案:如果你想在列表页显示“相关文章”,应该使用
{dede:likearticle}标签,它可以根据关键词、栏目等信息来调用相关文章。
| 需求场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 文章详情页,常规显示 | {dede:prenext} |
最简单、最原生,系统自动处理 | 自由度相对较低 |
| 文章详情页,需要高度自定义样式或内容 | {dede:arclist} 或 GetPreNextArc() |
灵活性极高,可结合任何字段 | 代码稍复杂,需要手动处理“不存在”的情况 |
| 列表页或首页 | 不适用 | - | 逻辑上不成立,应使用 {dede:likearticle} |
对于绝大多数情况,直接使用 {dede:prenext} 标签是最佳选择,简单高效,只有在需要非常特殊的功能时,才考虑使用更复杂的 arclist 或 PHP 代码方法。
