织梦上一篇下一篇链接如何动态生成?

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

“上一篇/下一篇”的核心逻辑是:根据当前文章的发布时间,找到时间上紧邻的前一篇文章和后一篇文章。

织梦的上一篇和下一篇
(图片来源网络,侵删)

织梦CMS已经内置了非常方便的标签来实现这个功能,我们只需要在文章内容页模板(通常是 article_article.htm)中正确调用即可。


使用默认的织梦标签(最简单、最常用)

织梦提供了两个专门的标签:{dede:prenext get='pre'}{dede:prenext get='next'}

基本用法

将这两个标签直接放在文章内容页模板(/templets/default/article_article.htm)的合适位置,比如文章内容的上方或下方。

示例代码:

织梦的上一篇和下一篇
(图片来源网络,侵删)
<div class="article-content">
    {dede:field.body/}
</div>
<div class="prenext">
    <div class="pre">
        {dede:prenext get='pre'/}
    </div>
    <div class="next">
        {dede:prenext get='next'/}
    </div>
</div>

效果:

  • {dede:prenext get='pre'} 会输出类似上一篇:<a href="/article/123.html">这是上一篇文章的标题</a>
  • {dede:prenext get='next'} 会输出类似下一篇:<a href="/article/125.html">这是下一篇文章的标题</a>

高级用法(自定义样式和文本)

默认的标签虽然方便,但样式比较单一,我们可以使用更灵活的 {dede:sql}{dede:arclist} 标签来完全自定义上一篇/下一篇的显示效果,包括链接、标题、甚至摘要和缩略图。

推荐使用 {dede:arclist} 标签,因为它更安全、更高效。

示例代码(自定义样式):

织梦的上一篇和下一篇
(图片来源网络,侵删)
<div class="prenext clearfix">
    <!-- 上一篇 -->
    <div class="pre-article">
        <span>上一篇:</span>
        {dede:arclist row=1 titlelen=40 orderby=pubdate idlist=''}
        <a href="[field:arcurl/]">[field:title/]</a>
        {/dede:arclist}
    </div>
    <!-- 下一篇 -->
    <div class="next-article">
        <span>下一篇:</span>
        {dede:arclist row=1 titlelen=40 orderby=pubdate idlist='' sort='desc'}
        <a href="[field:arcurl/]">[field:title/]</a>
        {/dede:arclist}
    </div>
</div>

代码解析:

  1. {dede:arclist}:调用文章列表标签。
  2. row=1:只获取一篇文章。
  3. titlelen=40长度限制,防止标题过长影响布局。
  4. orderby=pubdate这是关键! 按发布时间排序,从而实现“上一篇/下一篇”的逻辑。
  5. idlist='':这里留空,因为我们希望它根据当前文章动态查找相邻的。
  6. sort='desc':对于“下一篇”,我们需要按时间倒序排列,才能找到时间上排在后面的文章,上一篇则不需要这个属性(默认是升序)。

补充说明:article_article.htm 模板中,织梦会自动将当前文章的ID传递给环境变量。{dede:arclist} 在这个环境下,idlist 为空时,其行为就是查找与当前文章相关的文章,所以上面的代码是可行的。


使用 {dede:sql} 标签(不推荐,但了解无妨)

你也可以直接用SQL语句来查询,这种方法更直接,但安全性稍差,且不如arclist标签灵活。

示例代码:

<!-- 上一篇 -->
{dede:sql sql="SELECT * FROM `dede_archives` WHERE `pubdate` < (SELECT pubdate FROM `dede_archives` WHERE id=~id~) ORDER BY `pubdate` DESC LIMIT 1"}
<a href="/article/[field:id/].html">[field:title/]</a>
{/dede:sql}
<!-- 下一篇 -->
{dede:sql sql="SELECT * FROM `dede_archives` WHERE `pubdate` > (SELECT pubdate FROM `dede_archives` WHERE id=~id~) ORDER BY `pubdate` ASC LIMIT 1"}
<a href="/article/[field:id/].html">[field:title/]</a>
{/dede:sql}

代码解析:

  • ~id~ 是织梦模板中的特殊变量,代表当前文章的ID。
  • 上一篇的SQL逻辑是:查找 pubdate(发布时间)小于当前文章,并且按 pubdate 降序排列(即时间最大的那一个)的第一条记录。
  • 下一篇的SQL逻辑相反:查找 pubdate 大于当前文章,并且按 pubdate 升序排列的第一条记录。

为什么不推荐?

  • 性能:每次请求都会执行一次数据库查询,而arclist有更好的缓存机制。
  • 安全性:直接写SQL有潜在注入风险,虽然织梦对~id~做了处理,但不如官方标签安全。
  • 灵活性:无法方便地调用文章摘要、缩略图等其他字段。

总结与最佳实践

方法 优点 缺点 推荐度
{dede:prenext} 最简单,代码最少 样式固定,自定义能力差 ⭐⭐⭐⭐ (对于快速搭建)
{dede:arclist} 灵活,安全,性能好,可自定义标题长度、样式,甚至扩展摘要和缩略图 代码稍长一点 ⭐⭐⭐⭐⭐ (强烈推荐)
{dede:sql} 逻辑直接,功能强大 性能稍差,有安全风险,不灵活 ⭐ (仅作为了解)

最终建议:

对于绝大多数网站,直接使用 方法一中的高级用法({dede:arclist} 是最佳选择,它在保持代码简洁的同时,提供了足够的自定义空间,并且是官方推荐的安全高效的方式。

你可以根据自己网站的设计,给 .pre-article.next-article 添加CSS样式,使其与网站整体风格融为一体。

.prenext {
    margin: 20px 0;
    padding: 15px;
    border-top: 1px solid #eee;
    border-bottom: 1px solid #eee;
}
.prenext .pre-article,
.prenext .next-article {
    margin: 10px 0;
}
.prenext a {
    color: #333;
    text-decoration: none;
}
.prenext a:hover {
    color: #0066cc;
    text-decoration: underline;
}
-- 展开阅读全文 --
头像
App发布Dede模板下载?安全合规吗?
« 上一篇 02-16
dede手机模板如何使用?
下一篇 » 02-16

相关文章

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

目录[+]