在织梦(DedeCMS)系统中,面包屑导航(也称为面包导航或导航路径)是提升网站用户体验和SEO优化的重要功能,它能清晰展示当前页面在网站结构中的层级位置,织梦生成面包屑导航主要依赖系统内置的标签和函数,通过合理配置即可实现动态调用,以下是详细的操作方法和原理说明。

面包屑导航的基本原理
面包屑导航的核心逻辑是获取当前页面的父级栏目信息,并逐级向上递归,最终组合成“首页 > 栏目 > 子栏目 > 当前页面”的路径结构,织梦系统通过{dede:field name='position' /}标签或自定义函数实现这一功能,其中position字段会自动根据当前页面的类型(如文章页、栏目页)生成对应的路径代码。
通过默认标签生成面包屑导航
织梦系统默认提供了面包屑导航标签,使用方法简单,适合大多数场景,在模板文件(如article_article.htm、index.htm等)中,直接插入以下代码即可:
{dede:field name='position' /}
该标签会自动解析当前页面的层级关系,并生成带链接的导航路径,在文章页中,输出结果可能为:
首页 > 技术分享 > 织梦教程 > 织梦如何生成面包导航
“首页”“技术分享”“织梦教程”均为可点击的链接,点击可跳转至对应页面。

默认标签的局限性
默认标签虽然便捷,但样式和功能较为固定,无法满足自定义需求(如修改分隔符、添加当前页高亮等),此时需通过自定义函数或修改系统文件实现更灵活的控制。
自定义面包屑导航的实现方法
通过修改include/typelink.class.php文件
织梦的面包屑导航功能由typelink.class.php类文件驱动,通过修改该文件可调整导航逻辑,具体步骤如下:
- 打开
include/typelink.class.php文件,找到GetPosition()函数(约第120行)。 - 修改函数内的代码,例如调整分隔符或添加判断逻辑,以下为修改后的示例代码:
function GetPosition($islink=true){ $this->indexUrl = empty($this->indexUrl) ? $this->indexUrl : $this->indexUrl; $indexpage = "<a href='".$this->indexUrl."'>首页</a>"; $this->valuePosition = $indexpage; if($islink){ if($this->TypeLink->TypeInfos['reid']==0){ $murl = $this->TypeLink->GetOneTypeUrl($this->TypeLink->TypeInfos); $this->valuePosition .= " > <a href='".$murl."'>".$this->TypeLink->TypeInfos['typename']."</a>"; }else{ $this->valuePosition .= $this->GetNavType($this->TypeLink->TypeInfos['reid'],true); $murl = $this->TypeLink->GetOneTypeUrl($this->TypeLink->TypeInfos); $this->valuePosition .= " > <a href='".$murl."'>".$this->TypeLink->TypeInfos['typename']."</a>"; } }else{ $this->valuePosition .= " > ".$this->TypeLink->TypeInfos['typename']; } return $this->valuePosition; } - 保存文件后,刷新页面即可看到修改后的效果,将分隔符“>”改为“|”,需将代码中的
" > "替换为。
通过自定义函数实现
在织梦模板中,可通过自定义函数实现更灵活的面包屑导航,在templets/default/article_article.htm文件中添加以下代码:
{dede:field name='position' function='str_replace(" > ", " >> ", @me)'/}
上述代码将默认的分隔符“>”替换为“>>”,若需添加当前页高亮样式,可结合CSS实现:

<style>
.breadcrumb .current{color:#ff6600;font-weight:bold;}
</style>
<div class="breadcrumb">
{dede:field name='position' runphp='yes'}
$tc = @me;
$tc = preg_replace('/>(.*?)<\/a>/',' class="current">$1</a>',$tc);
@me = $tc;
{/dede:field}
</div>
不同页面类型的面包屑调用
织梦不同页面类型的面包屑调用方式略有差异,具体如下表所示:
| 页面类型 | 调用代码示例 | 说明 |
|---|---|---|
| 首页 | 无需调用,或直接显示“首页” | 首页通常不显示面包屑,或仅显示“首页” |
| 栏目页 | {dede:field name='position' /} |
调用当前栏目及其父级栏目路径 |
| 文章页 | {dede:field name='position' /} |
调用文章所在栏目及父级栏目路径,包含文章标题 |
| 自定义页面 | {dede:field name='position' /} |
需在后台页面属性中设置关联栏目,否则仅显示“首页 > 当前页面” |
| 搜索结果页 | 需自定义标签 | 默认不支持,可通过{dede:global name='keyword' function='html2text(@me)'/}等标签手动实现 |
常见问题与解决方案
-
面包屑不显示或显示异常
- 检查栏目是否设置了“上级栏目”,确保栏目层级正确。
- 确认模板文件中标签语法无误,如
{dede:field name='position' /}是否完整。 - 若修改过系统文件,检查代码是否有语法错误。
-
面包屑链接错误
- 进入后台“系统”-“系统基本参数”-“核心设置”,确认“网站首页链接”是否正确。
- 检查栏目“高级选项”中的“外部链接”是否为空,避免覆盖默认路径。
相关问答FAQs
问题1:如何在面包屑导航中隐藏“首页”?
解答:可通过修改typelink.class.php文件中的GetPosition()函数,删除或注释首页相关代码,将$indexpage = "<a href='".$this->indexUrl."'>首页</a>";改为$indexpage = "";,或直接删除该行代码。
问题2:面包屑导航如何支持多级栏目?
解答:织梦默认支持多级栏目面包屑,只要栏目层级设置正确(如父栏目 > 子栏目 > 孙栏目),系统会自动递归生成完整路径,若出现截断,需检查栏目是否为“最终栏目页”,或在后台“栏目管理”中确认栏目关联关系是否正确。
