帝国cms按时间上一篇下一篇

admin 103 0
帝国CMS按时间显示上一篇/下一篇功能,通过调用内容发布时间字段,按时间倒序或正序生成相邻内容的链接,帮助用户便捷按时间顺序浏览站点文章,提升内容连贯性与用户体验,该功能适用于资讯、博客等需按时间线展示内容的场景,通过后台参数设置即可启用,操作简单且实用性强,能有效引导用户持续阅读,增加页面停留时间。

帝国CMS实现按时间显示上一篇下一篇功能的详细教程

管理系统中,"上一篇/下一篇"导航功能是提升用户体验和优化网站SEO的重要元素,它能够帮助用户无缝浏览相关内容,有效降低跳出率,并增强网站的内部链接结构,帝国CMS作为国内广泛使用的建站系统,虽然默认提供了"上一篇/下一篇"调用标签,但其默认排序逻辑往往基于文章ID而非发布时间,这不符合用户对内容时间连续性的预期,本文将详细介绍如何在帝国CMS中实现按发布时间顺序显示上一篇/下一篇功能,涵盖灵动标签、万能标签及PHP代码调用三种常见场景,助您打造更符合用户习惯的内容导航体验。 与意义

默认情况下,帝国CMS的"上一篇/下一篇"调用(如[!--next--][!--pre--])通常基于文章ID排序,即ID相邻的文章会被视为上一篇/下一篇,这种排序方式不符合用户对"时间连续性"的自然预期——用户更希望按照发布时间顺序浏览内容(如按"2023-10-01→2023-10-02→2023-10-03"的顺序)。

按时间排序的上一篇/下一篇功能具有以下显著优势:

  • 提升用户体验:更直观地展示内容的时间脉络,帮助用户理解内容的发展顺序
  • 连贯性:特别适合新闻、博客、资讯等需要体现"时效性"的网站类型
  • 优化SEO效果:合理的内链结构有助于搜索引擎抓取更多页面,提升网站权重和页面收录率

默认上一篇/下一篇调用方式(基础)

在深入讲解按时间排序的实现前,我们先简要回顾帝国CMS的默认调用方式,默认情况下,在内容页模板(如e/public/html/showpage.php)中,可直接使用系统内置标签:

上一篇:[!--pre--]  
下一篇:[!--next--]

默认调用的"上一篇"是ID比当前文章小的最近一篇,"下一篇"是ID比当前文章大的最近一篇,与发布时间无关,若需按时间排序,必须通过自定义SQL查询实现。

按时间排序的实现方法

方法1:使用灵动标签(推荐,灵活高效)

灵动标签([e:loop])是帝国CMS最常用的循环调用标签,支持自定义SQL查询,非常适合按时间排序的上一篇/下一篇调用场景。

获取"下一篇"(按时间正序,即比当前文章晚发布的最近一篇)
[e:loop={'select * from [!db.pre!]ecms_news where newstime > "'.$navinfor[newstime].'" and classid='.$navinfor[classid].' order by newstime asc limit 1',1,24,0}]
下一篇:<a href="[!-news.url-]">[!-news.title-]</a>
[/e:loop]

代码解析

  • select * from [!db.pre!]ecms_news:查询新闻数据表(ecms_news为默认新闻表,若自定义栏目需修改表名,如ecms_article
  • newstime > "'.$navinfor[newstime].'":筛选发布时间晚于当前文章的记录
  • classid='.$navinfor[classid].'':限制仅当前栏目内的文章(若需全站调用,可删除此条件)
  • order by newstime asc:按发布时间正序排列(时间早的在前,即"最近的下一篇")
  • limit 1:仅取1条结果
  • [!-news.url-][!-news.title-]:分别调用文章链接和标题
获取"上一篇"(按时间倒序,即比当前文章早发布的最近一篇)
[e:loop={'select * from [!db.pre!]ecms_news where newstime < "'.$navinfor[newstime].'" and classid='.$navinfor[classid].' order by newstime desc limit 1',1,24,0}]
上一篇:<a href="[!-news.url-]">[!-news.title-]</a>
[/e:loop]

代码解析

  • newstime < "'.$navinfor[newstime].'":筛选发布时间早于当前文章的记录
  • order by newstime desc:按发布时间倒序排列(时间晚的在前,即"最近的上一篇")
  • 其他逻辑与"下一篇"一致
处理"无结果"时的显示(如当前文章是最新/最早)

为了避免没有上一篇/下一篇时显示空白,可结合条件判断进行优化:

<!-- 上一篇 -->
[e:loop={'select * from [!db.pre!]ecms_news where newstime < "'.$navinfor[newstime].'" and classid='.$navinfor[classid].' order by newstime desc limit 1',1,24,0}]
上一篇:<a href="[!-news.url-]">[!-news.title-]</a>
[/e:loop]
[ecmsinfo]0,10,30,0,

标签: #帝国 #上下