这是一个非常常见的需求,比如在文章详情页显示“上一篇”、“下一篇”、“相关文章”等。

核心思路
要实现调用当前文章信息的功能,关键在于理解 {dede:arclist} 标签的几个核心参数:
typeid: 指定要调用的栏目ID,如果留空,默认会调用当前文章所在栏目的文章。idlist: 指定要调用的文章ID列表,这是实现“上一篇/下一篇”功能的关键。row: 调用文章的数量。titlelen: 标题长度。orderby: 排序方式,常用id(按文章ID排序)或pubdate(按发布时间排序)。innertext: 单条记录的模板,即每篇文章的显示样式。
调用“上一篇”和“下一篇”
这是最经典的应用场景,在文章内容页 (article_article.htm),我们需要获取当前文章ID,然后调用ID比它大(下一篇)或小(上一篇)的文章。
获取当前文章ID
在文章详情页模板中,当前文章的ID可以通过全局变量 方法A:使用 这种方法通过构造一个包含上一篇和下一篇ID的列表来实现。 关键在于如何填充 完整模板示例 ( 方法B:使用 这种方法比较笨重,需要嵌套标签,且不够灵活,仅适用于简单的上一篇/下一篇调用。 相关文章通常指与当前文章在同一个栏目下的其他文章。 只需要设置 这里 进阶:排除当前文章 如果不想让当前文章出现在相关文章列表中,可以使用 错误示范! 推荐做法(结合PHP排除当前ID): 这种方法通过 虽然 需求:在文章页调用当前文章的缩略图。
页 ( 解释: 核心要点: 希望这份详细的解析能帮助你完全掌握在DedeCMS中使用 $arcID 获取,我们需要把它传递给 {dede:arclist}
实现方法
idlist 参数(推荐,更灵活)
<!-- 调用上一篇和下一篇 -->
{dede:arclist row='2' titlelen='30' orderby='id' idlist=''}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
idlist,这通常需要配合PHP代码来实现,因为织梦模板本身不支持复杂的逻辑运算。article_article.htm):{dede:include filename="head.htm"/}
<div class="article-content">
<h1>{dede:field.title/}</h1>
<div class="article-info">
发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}
作者:{dede:field.writer/}
来源:{dede:field.source/}
</div>
<div class="article-body">
{dede:field.body/}
</div>
</div>
<!-- 上一篇/下一篇 开始 -->
<div class="prenext">
<ul>
<!-- PHP代码块,用于获取上一篇和下一篇的ID -->
{dede:php}
// 获取当前文章ID
$arcID = $arcID;
// 获取上一篇和下一篇的ID
$preRow = $dsql->GetOne("SELECT id FROM `dede_archives` WHERE id < $arcID ORDER BY id DESC");
$nextRow = $dsql->GetOne("SELECT id FROM `dede_archives` WHERE id > $arcID ORDER BY id ASC");
// 将ID存入数组,用于idlist
$idlist = array();
if(is_array($preRow)) $idlist[] = $preRow['id'];
if(is_array($nextRow)) $idlist[] = $nextRow['id'];
// 将数组用逗号连接成字符串
$idlistStr = implode(',', $idlist);
// 将结果赋值给一个模板变量
$this->Fields['prenext_idlist'] = $idlistStr;
{/dede:php}
<!-- 使用PHP传递过来的ID列表 -->
{dede:arclist row='2' titlelen='30' orderby='id' idlist='[field:prenext_idlist/]'}
<li>
<!-- 使用runphp来判断是上一篇还是下一篇,并添加不同的样式 -->
[field:array runphp='yes']
if (@me['id'] < $arcID) {
@me = '<span class="pre">上一篇:</span><a href="'.@me['arcurl'].'">'.@me['title'].'</a>';
} else {
@me = '<span class="next">下一篇:</span><a href="'.@me['arcurl'].'">'.@me['title'].'</a>';
}
[/field:array]
</li>
{dede:arclist}
</ul>
</div>
<!-- 上一篇/下一篇 结束 -->
{dede:include filename="footer.htm"/}
channelartlist + type + noself (较旧,不推荐)
<!-- 上一篇 -->
{dede:prenext get='pre'/}
<!-- 下一篇 -->
{dede:prenext get='next'/}
{dede:prenext} 是一个专门的标签,专门用来实现这个功能,非常简单,但自定义样式比较麻烦。
调用“相关文章”
方法
typeid 为当前栏目ID,并排除当前文章即可。{dede:arclist row='8' titlelen='30' typeid='' orderby='pubdate'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
typeid='' 是关键,它会自动获取当前文章所在的栏目ID。row='8' 表示调用8篇相关文章。notypeid 参数(这个参数是排除栏目ID的,不适用),或者更通用的方法是利用 idlist。{dede:arclist row='8' titlelen='30' typeid='' idlist='[field:id/],'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:arclist}
idlist 需要一个ID列表,而不是单个ID,正确的做法是结合PHP,构造一个不包含当前ID的列表,或者使用 innertext 进行判断。{dede:arclist row='8' titlelen='30' typeid='' orderby='rand'}
[field:array runphp='yes']
// $arcID 是全局变量,代表当前文章ID
if (@me['id'] == $arcID) {
// 如果是当前文章,则输出空
@me = '';
} else {
// 如果不是当前文章,则正常输出
@me = '<li><a href="'.@me['arcurl'].'">'.@me['title'].'</a></li>';
}
[/field:array]
{/dede:arclist}
orderby='rand' 随机调用文章,然后在 innertext(这里是 [field:array])里用PHP判断并过滤掉当前文章。
调用当前文章本身的信息
{dede:arclist} 主要用于列表,但通过一些技巧,也可以用它来获取当前文章的单条信息,比如文章的缩略图。article_article.htm) 默认没有 {dede:field.litpic/} 这个变量,因为织梦默认不在文章内容页显示缩略图,但我们可以通过 {dede:arclist} 来“曲线救国”。<!-- 调用当前文章的缩略图 -->
{dede:arclist row='1' idlist='[field:id/]'}
<img src="[field:litpic/]" alt="[field:title/]" />
{/dede:arclist}
row='1': 只调用一篇文章。idlist='[field:id/]': 将当前文章的ID作为调用列表。[field:id/] 在这个上下文中,会解析为当前文章的ID。[field:litpic/]: 在 {dede:arclist} 循环体内,[field:litpic/] 就能正确获取到当前文章的缩略图路径。总结与最佳实践
需求
推荐标签/方法
关键参数/代码
上一篇/下一篇
{dede:arclist} + PHP构造 idlistidlist, orderby='id', row='2'
相关文章
{dede:arclist}typeid='', row
排除当前文章
{dede:arclist} + PHP innertext 判断innertext 内使用 runphp='yes'
获取当前文章单条信息(如缩略图)
{dede:arclist}row='1', idlist='[field:id/]'
$arcID (或 [field:id/]) 是获取当前文章ID的钥匙。idlist:通过构造ID列表,可以精确控制要调用的文章范围,是实现“上一篇/下一篇”和“排除当前文章”的核心。{dede:php} 或 {field:array runphp='yes'} 可以在模板中直接执行PHP代码,实现强大的功能。typeid='' 的妙用:在列表标签中,将 typeid 设为空字符串,通常会让标签自动获取当前栏目ID,非常方便。{dede:arclist} 调用当前文章相关内容的方法!
