dede上下篇定义规则是什么?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 DEDE建站 正文

页,显示“上一篇”和“下一篇”是一个非常常见且重要的功能,它能有效引导用户浏览更多内容,降低网站的跳出率,提升用户体验和页面浏览量。

dede 定义上下篇
(图片来源网络,侵删)

DedeCMS 提供了非常灵活的多种方式来实现这个功能,从最简单的模板标签到复杂的自定义SQL查询,可以满足各种需求。


使用官方默认的 GetNextArcGetPreArc 标签(最常用)

这是最标准、最简单的方法,适用于绝大多数情况,它通过调用一个函数来获取当前文章的上一篇和下一篇信息。

标签语法

模板(通常是 article_article.htm)中,将以下代码插入到你希望显示上下篇的位置。

上一篇标签:

dede 定义上下篇
(图片来源网络,侵删)
{dede:getpreart}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:getpreart}

下一篇标签:

{dede:getnextart}
<a href='[field:arcurl/]'>[field:title/]</a>
{/dede:getnextart}

标签详解

  • {dede:getpreart}...{/dede:getpreart}:这是一个循环标签,用于获取上一篇,如果存在上一篇,它会循环输出其中的内容;如果不存在,则什么都不输出。
  • {dede:getnextart}...{/dede:getnextart}:同理,用于获取下一篇。
  • [field:arcurl/]:获取文章的链接地址。
  • [field:title/]:获取文章的标题。

功能扩展和常用属性

这两个标签支持一些属性,可以让你更好地控制输出。

a. 控制字数(防止标题过长)

使用 len 属性来限制标题显示的字符数,超出部分用省略号 代替。

dede 定义上下篇
(图片来源网络,侵删)
{dede:getpreart}
<a href='[field:arcurl/]' title="[field:title/]">[field:title function='cn_substr(@me, 30)'/]</a>
{/dede:getpreart}
{dede:getnextart}
<a href='[field:arcurl/]' title="[field:title/]">[field:title function='cn_substr(@me, 30)'/]</a>
{/dede:getnextart}

注意:这里使用了 function='cn_substr(@me, 30)' 来截取字符串,这是 DedeCMS 的一个内置函数。@me 代表当前字段的值。

b. 处理没有上下篇的情况

当没有上一篇或下一篇时,默认标签不会输出任何内容,我们可以通过添加默认文本来优化用户体验。

<!-- 上一篇 -->
{dede:getpreart}
    <a href='[field:arcurl/]' title="[field:title/]">上一篇:[field:title function='cn_substr(@me, 30)'/]</a>
{else}
    上一篇:没有了
{/dede:getpreart}
<!-- 下一篇 -->
{dede:getnextart}
    <a href='[field:arcurl/]' title="[field:title/]">下一篇:[field:title function='cn_substr(@me, 30)'/]</a>
{else}
    下一篇:没有了
{/dede:getnextart}

这里使用了 {else} 标签,当 getpreartgetnextart 没有获取到结果时,就会输出 else 后面的内容。

c. 指定栏目(仅获取同栏目下的上下篇)

默认情况下,上下篇是全站范围的,如果你只想在当前栏目内查找,可以添加 col 属性。

{dede:getpreart col='0'}
    <a href='[field:arcurl/]' title="[field:title/]">上一篇:[field:title function='cn_substr(@me, 30)'/]</a>
{else}
    上一篇:没有了
{/dede:getpreart}
{dede:getnextart col='0'}
    <a href='[field:arcurl/]' title="[field:title/]">下一篇:[field:title function='cn_substr(@me, 30)'/]</a>
{else}
    下一篇:没有了
{/dede:getnextart}
  • col='0':表示在当前文章所在栏目内查找。
  • col='-1':表示在全站所有栏目(包括副栏目)内查找。
  • col='栏目ID':表示在指定的栏目ID内查找。

使用 arclist 标签(更灵活,可自定义排序)

如果你觉得 GetNextArcGetPreArc 的功能不够用,比如想按特定的排序方式(如按发布时间、点击量)来获取上下篇,可以使用 arclist

这种方法的核心思路是:获取当前文章ID,然后用 arcid 排除掉当前文章,再用 sortorderway 指定排序方向,最后只取一条记录。

获取当前文章ID

在模板中,你需要先获取当前文章的ID,通常通过全局变量 $arcid

{dede:getvar name='arcid'/}

使用 arclist 获取上一篇和下一篇

上一篇(按ID降序,即ID比当前小的最新一篇):

{dede:arclist row='1' titlelen='30' sort='id' orderway='desc' arcid='$arcid'}
    <a href='[field:arcurl/]' title="[field:title/]">上一篇:[field:title/]</a>
{/dede:arclist}

下一篇(按ID升序,即ID比当前大的最新一篇):

{dede:arclist row='1' titlelen='30' sort='id' orderway='asc' arcid='$arcid'}
    <a href='[field:arcurl/]' title="[field:title/]">下一篇:[field:title/]</a>
{/dede:arclist}

arclist 关键属性解释

  • row='1':只获取一条记录,len='30'`:标题长度限制。
  • sort='id':按文章ID排序,这是获取上下篇最关键的,因为DedeCMS默认新文章的ID更大。
  • orderway='desc':排序方式,desc 为降序(从大到小),asc 为升序(从小到大)。
  • arcid='$arcid'非常重要,这个属性会排除掉当前文章ID,确保不会获取到当前文章本身。

使用自定义SQL(最强大,适用于复杂逻辑)

如果你有非常特殊的需求,比如需要根据文章的某个自定义字段(如权重、专题ID等)来决定上下篇的顺序,那么直接写SQL是最好的选择。

获取当前文章ID和栏目ID

{dede:getvar name='arcid'/}
{dede:getvar name='typeid'/}

编写自定义SQL标签

DedeCMS 提供了 {dede:sql} 标签来执行自定义SQL查询。

示例:获取上一篇(按自定义字段weight降序,然后按ID升序)

{dede:sql sql='Select id,title From dede_archives where id < ~arcid~ and typeid=~typeid~ order by weight desc, id asc limit 1'}
    <a href='/plus/view.php?aid=[field:id/]' title="[field:title/]">上一篇:[field:title function="cn_substr(@me,30)"/]</a>
{/dede:sql}

示例:获取下一篇(按自定义字段weight升序,然后按ID降序)

{dede:sql sql='Select id,title From dede_archives where id > ~arcid~ and typeid=~typeid~ order by weight asc, id desc limit 1'}
    <a href='/plus/view.php?aid=[field:id/]' title="[field:title/]">下一篇:[field:title function="cn_substr(@me,30)"/]</a>
{/dede:sql}

SQL语句详解

  • Select id,title From dede_archives:从文章表 dede_archives 中查询ID和标题。
  • where id < ~arcid~:查找ID小于当前文章ID的记录(上一篇)。~arcid~ 是DedeCMS模板中调用PHP变量的特殊写法。
  • and typeid=~typeid~:限制在当前栏目内查找。
  • order by weight desc, id asc:先按自定义的 weight 字段降序排列,weight 相同,再按ID升序排列,这是实现复杂排序的关键。
  • limit 1:只取一条结果。
  • /plus/view.php?aid=[field:id/]:手动拼接文章链接地址。

总结与推荐

方法 优点 缺点 适用场景
GetNextArc/GetPreArc 官方推荐,最简单,性能好 功能相对固定,排序方式固定(按发布时间/ID) 99%的常规需求,快速实现上下篇功能。
arclist 灵活,可以自定义排序字段(如按ID) 语法比方法一稍复杂,性能略低于方法一 需要按特定顺序(如ID)获取上下篇,且不满足默认排序时。
自定义SQL 功能最强大,完全可控 语法复杂,需要懂SQL,有一定风险(SQL注入) 有非常特殊的业务逻辑,需要根据自定义字段等复杂条件排序时。

对于绝大多数用户,我强烈推荐使用【方法一】,它简单、高效、稳定,并且官方文档也推荐使用,只有在方法一无法满足你的特殊需求时,再去考虑方法二和方法三。

-- 展开阅读全文 --
头像
C语言socket编程如何实现网络通信?
« 上一篇 04-13
C语言FreeRTOS怎么入门?
下一篇 » 04-13

相关文章

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