arclist 标签主要用于调用文章列表,但它本身并不直接提供栏目链接,要实现“在文章列表旁边显示其所属栏目的链接”,我们需要结合使用 arclist 和 typelink(或 typeurl)这两个标签。

下面我将从基础用法到进阶技巧,为你详细讲解。
核心思路
arclist:负责循环输出文章列表,它有一个非常重要的属性channelid,用于指定要调用哪个栏目的文章。typelink/typeurl:这两个是专门用来获取栏目链接的标签。{dede:typelink}:获取栏目的完整链接(包括<a>标签),<a href='https://www.example.com/plus/list.php?tid=1'>栏目名称</a>。{dede:typeurl}:只获取栏目的 URL 地址,https://www.example.com/plus/list.php?tid=1。
我们的目标就是在 arclist 的循环体内,调用这两个标签之一来显示当前文章所属栏目的链接。
基础用法:在文章列表中显示栏目链接
这是最常见的需求,即在每篇文章的标题旁边或下方,加上一个指向其所属栏目的链接。
标签代码示例
{dede:arclist typeid='' row='10' titlelen='40' orderby='pubdate'}
<li>
<!-- [field:textlink/] 是文章标题的链接 -->
[field:textlink/]
<!-- 在文章标题后面加上一个竖线分隔符 -->
-
<!-- [field:typelink/] 是文章所属栏目的链接 -->
[field:typelink/]
</li>
{/dede:arclist}
代码解析
{dede:arclist ...}: 开始调用文章列表。typeid='':typeid用于指定要调用哪个栏目的文章,留空 表示调用所有栏目的文章,如果你想只调用某个特定栏目(ID 为 1 的栏目),就写成typeid='1'。row='10': 设置调用文章的数量,这里是 10 篇。titlelen='40': 设置文章标题的长度,这里是 40 个字符(一个汉字算2个字符)。orderby='pubdate': 设置文章的排序方式,这里是按发布时间倒序排列。
[field:textlink/]: 这是arclist的一个字段,用于输出文章的标题并自动加上文章链接。<a href="文章链接">文章标题</a>。[field:typelink/]: 这是arclist循环体内可以调用的字段,它会自动获取当前文章所属栏目的链接和名称。<a href="栏目链接">栏目名称</a>。
显示效果
假设你有一篇文章标题为“DedeCMS 教程”,它属于“技术分享”栏目,那么最终生成的 HTML 可能是这样的:

<li> <a href="https://www.example.com/plus/view.php?aid=123">DedeCMS 教程</a> - <a href="https://www.example.com/plus/list.php?tid=5">技术分享</a> </li>
进阶用法:只获取栏目 URL 或名称
有时候你可能不需要完整的 <a> 标签,只需要 URL 或者栏目名称。
只获取栏目 URL
使用 使用 使用 使用 如果你对 PHP 语法熟悉,可以用 这个方法比较复杂,不如直接用 下面是一个更完整的、常见的文章列表模板,包含了文章标题、发布时间、栏目链接和摘要。 为什么我的 请检查以下几点: 如何调用外部模型(比如软件、产品)的栏目链接? 默认情况下, 示例:调用软件模型(channelid=3)的列表,并显示其所属栏目链接。 希望这份详细的指南能帮助你完全掌握在 DedeCMS 中使用 {dede:typeurl}
{dede:arclist typeid='' row='5'}
<p>
文章标题: [field:title/]
</p>
<p>
所属栏目URL: [field:typeurl/]
</p>
<hr>
{/dede:arclist}
只获取栏目名称
{dede:typelink} 标签的 function 属性来处理,或者更简单的方式是使用 {dede:typename}
{dede:typename} (推荐){dede:typename} 是专门在 arclist 循环内获取栏目名称的标签,非常方便。{dede:arclist typeid='' row='5'}
<p>
<a href="[field:typeurl/]">[field:typename/]</a> > <a href="[field:arcurl/]">[field:title/]</a>
</p>
{/dede:arclist}
{dede:typelink} 的 function 属性
function 来截取。{dede:arclist typeid='' row='5'}
<!-- 使用 function='str_replace("<a","",str_replace("</a>","",@me))' 来去掉 a 标签 -->
[field:typelink function='str_replace("<a","",str_replace("</a>","",@me))'/]
<br>
{/dede:arclist}
{dede:typename} 简洁。
完整模板示例:一个常见的文章列表布局
<ul class="article-list">
{dede:arclist typeid='' row='8' titlelen='50' infolen='150' orderby='pubdate'}
<li class="clearfix">
<div class="article-title">
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<div class="article-info">
<span>发布于:[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
<span>分类:<a href="[field:typeurl/]">[field:typename/]</a></span>
</div>
</div>
<div class="article-summary">
<p>[field:info/]...</p>
</div>
</li>
{/dede:arclist}
</ul>
代码解析
infolen='150': 设置文章摘要的长度。[field:pubdate function="MyDate('Y-m-d',@me)"/]: 调用文章发布时间,并使用 function 属性通过 MyDate 函数将其格式化为 年-月-日 的格式。[field:arcurl/]: 获取文章的链接。[field:typeurl/]: 获取栏目的链接。[field:typename/]: 获取栏目的名称。[field:info/]: 获取文章的摘要内容。
常见问题与注意事项 (FAQ)
typeid 和 topid 的区别是什么?
typeid: 指定调用特定栏目及其所有子栏目下的文章。typeid='1' 会调用栏目 ID 为 1 的文章,以及它所有一级、二级...子栏目下的文章。topid: 指定调用顶级栏目下的文章。topid='1' 会调用栏目 ID 为 1 的文章,但如果它有子栏目,则不会调用子栏目下的文章。[field:typelink/] 显示不出来?
typelink,而不是 type_link 或其他拼写。arclist 循环:确保 [field:typelink/] 是写在 {dede:arclist} 和 {/dede:arclist} 之间的。arclist 只能调用文章模型(article)的栏目,如果要调用其他模型的栏目,需要指定 channelid。
channelid 通常是 1。channelid 通常是 3。channelid 通常是 2。{dede:arclist channelid='3' row='10'}
<li>
[field:textlink/] - [field:typelink/]
</li>
{/dede:arclist}
arclist 标签来显示栏目链接的方法!
