使用默认全局标签 {dede:field name='position'/} (最常用、最简单)
这是 DedeCMS 内置的最直接的方法,专门用于调用当前位置。

(图片来源网络,侵删)
标签语法
{dede:field name='position'/}
作用与效果
这个标签会自动根据当前页面的层级,生成一个面包屑导航链接。
- 在首页:不显示任何内容(或只显示“首页”,取决于系统设置)。
- 在“新闻中心”栏目页:显示
首页 > 新闻中心 - 在“新闻中心 > 公司动态”文章页:显示
首页 > 新闻中心 > 公司动态
自定义分隔符
默认的分隔符是 >,你可以通过 separator 属性来自定义它。
示例代码:
<div class="breadcrumb">
{dede:field name='position' separator=' / '/}
</div>
效果: 首页 / 新闻中心 / 公司动态

(图片来源网络,侵删)
自定义链接文字(如将“首页”改为“网站首页”)
默认的“首页”文字是固定的,如果你想修改它,可以在后台进行设置,或者使用更灵活的 type 属性。
示例代码:
<div class="breadcrumb">
{dede:field name='position' type='top'/}
</div>
type='top':会强制显示顶级栏目(通常是首页),并链接到首页。- 如果你还想修改“首页”的文字,最简单的方法是去后台的“系统” -> “系统基本参数” -> “核心设置”里找到“首页链接显示文本”进行修改。
使用循环标签 {dede:channel} (更灵活,可完全自定义样式)
当默认的 {dede:field name='position'} 无法满足你的样式或功能需求时(比如想在每个链接后加一个小图标,或者想控制最后一个链接是否可点击),你可以使用 {dede:channel} 标签来手动构建面包屑导航。
核心思路
- 获取当前页面的所有父级栏目ID。
- 使用
{dede:channel}标签循环输出这些父级栏目。 - 最后再输出当前页面的名称(如果是文章页)。
示例代码 (文章页面包屑)
这段代码可以实现一个功能完整的、样式可控的面包屑导航。

(图片来源网络,侵删)
<div class="breadcrumb">
<a href="{dede:global.cfg_cmsurl/}/">首页</a>
<span class="separator">></span>
<!-- 循环输出父级栏目 -->
{dede:field name='typelink'/}
<!-- 这句会自动输出所有父级栏目的链接,如:<a href='news/'>新闻中心</a><a href='news/gongsi/'>公司动态</a> -->
<!-- 输出当前页面名称(文章标题) -->
<span class="separator">></span>
<span class="current">{dede:field name='title'/}</span>
</div>
代码解析:
{dede:global.cfg_cmsurl/}:获取网站根目录URL,用于构建首页链接。{dede:field name='typelink'/}:这是关键!它会自动解析当前文章所属的所有父级栏目,并生成带链接的<a>标签,它已经包含了分隔符>。{dede:field name='title'/}:获取当前文章的标题,作为面包屑的最后一项。
更精细的循环控制(不使用 typelink):
如果你想对每个链接进行更精细的控制,比如添加 class 或修改样式,可以这样写:
<div class="breadcrumb">
<a href="{dede:global.cfg_cmsurl/}/">首页</a>
<!-- 循环父级栏目 -->
{dede:channel type='top' currentstyle='<span class="separator">></span><a class="current" href=~typelink~>~typename~</a>'}
<span class="separator">></span>
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
<!-- 如果是文章页,再显示文章标题 -->
{dede:field name='title' runphp='yes'}
if(@me != '') {
@me = '<span class="separator">></span><span class="current">'.@me.'</span>';
}
{/dede:field}
</div>
这个版本更复杂,但提供了最大的灵活性,可以控制每个链接的样式。
在列表页和栏目页调用
上面的方法主要针对文章页(article_article.htm),在列表页(article_list.htm)和栏目页(category.htm)调用,方法类似,但略有不同。
在列表页 (article_list.htm)
列表页的面包屑通常只需要显示到它所属的栏目即可。
简单方法 (推荐):
{dede:field name='position' separator=' > '/}
这会显示类似 首页 > 新闻中心 > 公司动态 的效果。
手动构建方法:
<div class="breadcrumb">
<a href="{dede:global.cfg_cmsurl/}/">首页</a>
<span>></span>
{dede:field name='title' function='GetCatLink(@me)'/}
</div>
这里使用了 function='GetCatLink(@me)',这是一个自定义函数,可以直接生成当前栏目的链接。
在栏目页 (category.htm)
栏目页的面包屑只需要显示到它自己即可。
简单方法 (推荐):
{dede:field name='position' separator=' > '/}
这会显示类似 首页 > 新闻中心 的效果。
总结与最佳实践
| 场景 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 绝大多数情况 | {dede:field name='position'} |
最简单、最直接、系统原生支持 | 样式和文字自定义能力有限 |
| 需要高度自定义样式 | {dede:channel} 循环标签 |
灵活性极高,可完全控制HTML结构、CSS类名 | 代码稍复杂,需要理解标签逻辑 |
| 列表页/栏目页 | {dede:field name='position'} |
简单有效,完全满足需求 | - |
最终建议:
- 先尝试使用
{dede:field name='position'},它能解决80%的需求。 - 如果默认的样式或分隔符不满足你,使用
separator属性进行微调。 - 只有当你需要对面包屑的每一个细节(如添加图标、修改最后一个链接为不可点击的纯文本等)进行完全控制时,才去使用
{dede:channel}手动构建。
希望这份详细的讲解能帮助你完全掌握 DedeCMS 栏目位置的调用!
