使用默认的 {dede:prenext} 标签(最简单、最常用)
这是织梦内置的、最直接的方法,它会自动获取当前文章的上一篇和下一篇,并生成带有标题和链接的HTML代码。

(图片来源网络,侵删)
基础用法
页模板(通常是 article_article.htm)中,您想显示上下篇链接的位置,插入以下代码:
{dede:prenext get='pre'/}
{dede:prenext get='next'/}
get='pre':获取上一篇get='next':获取下一篇
组合使用(推荐)
通常我们会将它们组合在一起,并用一些HTML标签进行美化,形成一个完整的上下篇导航模块。
<div class="prenext">
<div class="pre">
{dede:prenext get='pre'/}
</div>
<div class="next">
{dede:prenext get='next'/}
</div>
</div>
自定义样式和文本
默认的输出格式是:
上一篇:<a href="链接">文章标题</a>
如果您想修改“上一篇”和“下一篇”的文本,或者改变其样式,可以使用 innertext 属性。

(图片来源网络,侵删)
<div class="prenext">
<!-- 上一篇,并自定义文本和样式 -->
<div class="pre">
{dede:prenext get='pre' innertext='上一篇:<a href="[field:link/]" title="[field:title/]">[field:title/]</a>'/}
</div>
<!-- 下一篇,并自定义文本和样式 -->
<div class="next">
{dede:prenext get='next' innertext='下一篇:<a href="[field:link/]" title="[field:title/]">[field:title/]</a>'/}
</div>
</div>
innertext 属性说明:
[field:link/]:获取文章的链接地址。[field:title/]:获取文章的标题。[field:title function='htmlspecialchars(@me)'/]中包含特殊HTML字符(如<,>,&),使用这个可以防止XSS攻击,更安全。
仅显示链接,不显示“上一篇/下一篇”文字
如果您只想显示一个带标题的链接,可以这样写:
{dede:prenext get='pre' innertext='<a href="[field:link/]" title="[field:title/]">[field:title/]</a>'/}
{dede:prenext get='next' innertext='<a href="[field:link/]" title="[field:title/]">[field:title/]</a>'/}
使用 {dede:field} 和 arc.archives 标签(更灵活、更强大)
如果您需要更精细地控制上下篇的显示逻辑,比如判断是否存在,或者获取更多信息(如发布时间、缩略图等),可以使用这种方法。
获取上一篇和下一篇的数组信息
页模板中,{dede:field} 标签可以获取当前文章的上下篇信息,并以数组形式返回。
{dede:prenext get='pre'/} <!-- 先调用一次,用于生成上下篇数据 -->
您可以使用 field 标签来循环输出这些信息。
示例:带判断和样式的上下篇导航
这是一个非常实用的例子,它会判断上下篇文章是否存在,如果不存在则显示“没有了”。
<div class="prenext">
<!-- 上一篇 -->
<div class="pre">
{dede:prenext get='pre'/}
<!-- 使用field标签循环上一篇的信息 -->
<ul>
{dede:field name='pre' runphp='yes'}
if(@me){
@me = "<li><span>上一篇:</span><a href='".@me['arcurl']."'>".@me['title']."</a></li>";
}else{
@me = "<li><span>上一篇:</span>没有了</li>";
}
{/dede:field}
</ul>
</div>
<!-- 下一篇 -->
<div class="next">
{dede:prenext get='next'/}
<!-- 使用field标签循环下一篇的信息 -->
<ul>
{dede:field name='next' runphp='yes'}
if(@me){
@me = "<li><span>下一篇:</span><a href='".@me['arcurl']."'>".@me['title']."</a></li>";
}else{
@me = "<li><span>下一篇:</span>没有了</li>";
}
{/dede:field}
</ul>
</div>
</div>
代码解释:
{dede:prenext get='pre'/}:这一句是关键,它必须先调用一次,才能让{dede:field name='pre'}获取到数据。{dede:field name='pre' runphp='yes'}:name='pre'指定要获取上一篇的信息,runphp='yes'允许在PHP代码中处理这些数据。@me:在runphp中,@me代表当前字段的值,这里就是上一篇文章的信息数组。if(@me){...}else{...}:判断@me是否为空,如果不为空(即存在上一篇),则生成链接;如果为空,则显示“没有了”。@me['arcurl']和@me['title']:数组中的键名,分别代表文章链接和文章标题。
获取上下篇文章的其他字段(如缩略图、简介)
结合方法二,您可以轻松获取上下篇文章的任何可用字段,例如缩略图(litpic)、简介(description)等。
<div class="prenext">
<h3>相关文章</h3>
<div class="article-relation">
<!-- 上一篇 -->
{dede:prenext get='pre'/}
{dede:field name='pre' runphp='yes'}
if(@me){
@me = "
<div class='relation-item'>
<a href='".@me['arcurl']."' title='".@me['title']."'>
<img src='".@me['litpic']."' alt='".@me['title']."'>
<h4>".@me['title']."</h4>
</a>
</div>
";
}else{
@me = "<div class='relation-item'>没有了</div>";
}
{/dede:field}
<!-- 下一篇 -->
{dede:prenext get='next'/}
{dede:field name='next' runphp='yes'}
if(@me){
@me = "
<div class='relation-item'>
<a href='".@me['arcurl']."' title='".@me['title']."'>
<img src='".@me['litpic']."' alt='".@me['title']."'>
<h4>".@me['title']."</h4>
</a>
</div>
";
}else{
@me = "<div class='relation-item'>没有了</div>";
}
{/dede:field}
</div>
</div>
可用字段列表:
您可以在 @me 数组中使用以下字段:
arcurl:文章链接:文章标题litpic:文章缩略图description:文章简介pubdate:发布时间(时间戳)shorttitle:文章短标题typedir:栏目目录
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
{dede:prenext} |
最简单、最直接,代码量少。 | 灵活性较低,样式和文本修改有限。 | 快速实现,对样式要求不高的场景。 |
{dede:field} |
非常灵活,可自定义样式,可判断有无,可获取任意字段。 | 代码稍复杂,需要理解PHP和织梦标签的配合。 | 对上下篇导航有较高设计要求,或需要显示额外信息的场景。 |
给您的建议:
- 对于绝大多数网站,使用 方法一 的组合用法就足够了,简单高效。
- 如果您是网站开发者或对页面有较高要求,强烈推荐 方法二 和 方法三,它们能让您的页面更加美观和功能强大。
请确保您的修改是在织梦的页模板(路径:/templets/default/article_article.htm 或您自定义的模板)中进行,修改完成后,请清除网站缓存,然后刷新文章页面即可看到效果。
