下面我将从基础修改到高级自定义,为你详细讲解如何修改面包屑导航。

基础理解:面包屑标签是什么?
在织梦的模板文件(通常是 article_article.htm 文件详情页或 list_category.htm 列表页)中,你可能会找到这样一行代码:
{dede:field name='position' /}
这个 {dede:field name='position' /} 标签的作用就是自动生成面包屑导航,它会根据当前内容所在的栏目层级,自动生成类似 “首页 > 栏目A > 栏目B > 文章标题” 这样的链接结构。
修改面包屑的常见方式
直接修改模板标签(最简单)
这是最直接的方法,可以快速改变面包屑的显示样式。
-
找到模板文件
(图片来源网络,侵删)- 如果是文章详情页,路径通常是:
/templets/你的模板名称/article_article.htm - 如果是栏目列表页,路径通常是:
/templets/你的模板名称/list_category.htm - 如果是首页,路径通常是:
/templets/你的模板名称/index.htm
- 如果是文章详情页,路径通常是:
-
修改标签代码
-
默认样式:
<nav> <a href="{dede:global.cfg_cmsurl/}/">首页</a> > {dede:field name='position' /} </nav>这会生成类似 “
首页 > 首页 > 科技 > 互联网 > 一篇文章” 的效果(注意“首页”重复了)。 -
修改分隔符: 默认的分隔符是
>,你可以通过修改标签来更换它。
(图片来源网络,侵删){dede:field name='position' runphp='yes'} @me = str_replace(' > ', ' / ', @me); {/dede:field}这会将分隔符从
>改为 ,效果如 “首页 / 科技 / 互联网 / 一篇文章”。 -
修改样式(添加CSS类): 为了方便用CSS控制样式,可以给面包屑包裹一个
div并添加类名。<div class="breadcrumb"> <a href="{dede:global.cfg_cmsurl/}/">首页</a> > {dede:field name='position' /} </div>然后你就可以在CSS文件中定义
.breadcrumb的样式了。
-
使用PHP代码自定义面包屑(最灵活)
如果你想完全控制面包屑的每一个部分,比如去掉文章标题、只显示栏目路径,或者改变链接的生成方式,就需要使用 runphp='yes' 属性来手动构建。
这是一个非常强大的技巧,下面以“只显示栏目路径,不显示文章标题”为例进行说明。
场景: 你希望面包屑显示为 “首页 > 科技 > 互联网”,而不是 “首页 > 科技 > 互联网 > 文章标题”。
操作步骤:
-
打开模板文件,找到
{dede:field name='position' /}这一行。 -
替换为以下PHP代码:
{dede:field name='position' runphp='yes'} // 获取原始的面包屑字符串,"首页 > 科技 > 互联网 > 文章标题" $position = @me; // 使用 ">" 分割字符串,得到一个数组 $parts = explode(' > ', $position); // 去掉数组的最后一个元素(也就是文章标题) // array_pop() 会删除并返回数组的最后一个元素 array_pop($parts); // 用 " > " 重新连接数组元素 @me = implode(' > ', $parts); {/dede:field}
代码解释:
runphp='yes':开启PHP执行模式。$position = @me;:@me变量代表了标签{dede:field name='position' /}原始输出的值,我们把它赋给一个变量$position。explode(' > ', $position):用>作为分隔符,把长字符串拆分成一个数组。array_pop($parts):删除数组的最后一个元素,这正是我们去掉文章标题的关键一步。implode(' > ', $parts):把处理后的数组用>重新拼接成字符串。@me = ...:将最终处理好的字符串重新赋值给@me,标签就会输出这个新值。
其他自定义示例:
-
在面包屑最后添加“当前页”:
{dede:field name='position' runphp='yes'} $position = @me; $parts = explode(' > ', $position); array_pop($parts); // 去掉原标题 @me = implode(' > ', $parts) . ' > <span class="current">当前页面</span>'; {/dede:field} -
自定义首页链接文字:
{dede:field name='position' runphp='yes'} $position = @me; // 将首页的文字从 "首页" 替换为 "Home" $position = str_replace('首页', 'Home', $position); @me = $position; {/dede:field}
修改系统函数(不推荐,除非你很熟悉)
如果你想从根源上改变面包屑的生成逻辑,可以修改织梦的核心文件。但强烈不建议新手这么做,因为升级织梦版本时,你的修改会被覆盖,且容易出错。
- 找到文件:
include/typelink.class.php - 找到函数:在文件中找到
GetPosition()方法,这个方法就是生成面包屑的核心。 - 修改逻辑:直接修改这个方法里的PHP代码。
再次强调: 除非你有特殊需求且无法通过模板标签实现,否则请优先使用方式二,它更安全、更灵活,且不会因系统升级而失效。
总结与建议
| 修改需求 | 推荐方法 | 优点 | 缺点 |
|---|---|---|---|
| 更换分隔符 | 方式一(修改标签) | 简单快捷 | 不够灵活 |
| 添加CSS类 | 方式一(修改标签) | 简单快捷 | 不够灵活 |
| 去掉文章标题 | 方式二(PHP自定义) | 灵活、强大、安全 | 需要一点PHP基础 |
| 完全自定义结构 | 方式二(PHP自定义) | 完全可控 | 需要PHP基础 |
| 从根本上改变逻辑 | 方式三(修改核心文件) | 一劳永逸 | 危险,升级后失效,易出错 |
对于绝大多数用户来说,掌握方式二就足够解决99%的面包屑修改需求了,它既保留了织梦标签的便捷性,又提供了足够的自定义能力,是最佳实践。
