在 DedeCMS 中,当前位置通常由一个名为 position.lib.php 的文件来驱动,这个文件被包含在模板的头部或指定位置,用于自动生成类似“首页 > 栏目 > 文章标题”的导航路径。

(图片来源网络,侵删)
核心文件与标签
- 核心文件:
/include/typelink.class.php和/include/arc.archives.class.php(用于文章页) 等类文件负责处理链接的生成逻辑。 - 核心标签:
{dede:field.position/}或简写为{dede:position/},这是在模板中调用当前位置的主要标签。 - 样式标签:
{dede:field.title/}用于获取当前页面的标题,通常会作为路径的最后一项。
如何调用当前位置
在您的模板文件(如 article_article.htm)中,您只需要在想要显示面包屑导航的地方插入以下标签即可:
{dede:field.position/}
或者使用它的完整形式,功能完全相同:
{dede:field.position runphp='yes'}
@me = str_replace(' > ', ' » ', @me);
{/dede:field.position}
示例效果:
如果当前文章是“织梦教程”,它属于“网站建设”栏目,而“网站建设”栏目在“技术分享”主栏目下,{dede:field.position/} 会输出:
首页 > 技术分享 > 网站建设 > 织梦教程
自定义分隔符
默认的分隔符是 > (大于号),您可以通过修改标签的 separator 属性来自定义它。

(图片来源网络,侵删)
语法:
{dede:field.position separator='您的自定义分隔符'/}
示例1: 使用 (») 符号
{dede:field.position separator='»'/}
输出效果:首页 » 技术分享 » 网站建设 » 织梦教程
示例2: 使用 (斜杠)

(图片来源网络,侵删)
{dede:field.position separator=' / '/}
输出效果:首页 / 技术分享 / 网站建设 / 织梦教程
高级用法:通过 PHP 代码自定义
如果您需要对路径进行更复杂的控制,例如修改最后一项的样式、添加链接或完全自定义输出,可以使用 runphp='yes' 属性。
基本语法:
{dede:field.position runphp='yes'}
// 在这里编写PHP代码来处理 @me 变量
// @me 默认包含了完整的路径字符串,如 "首页 > 栏目A > 栏目B"
// 您可以修改 @me 的值,然后输出
@me = str_replace(' > ', ' <span class="separator">»</span> ', @me);
{/dede:field.position}
进阶示例:将最后一项(当前页标题)变为无链接的纯文本
这是面包屑导航的一个常见需求,即“当前页”不需要再链接到自身。
{dede:field.position runphp='yes'}
// 1. 获取完整的路径字符串
$position = @me;
// 2. 获取当前页的标题(通常是路径的最后一项)
$title = '{dede:field.title/}';
// 3. 用正则表达式匹配并替换掉最后一项的链接
// 这个正则会匹配 " > <a href...>标题</a>" 这样的模式,并将其替换为 " > 标题"
@me = preg_replace('/( > <a [^>]+>)([^<]+)(<\/a>)/', ' > '.$title, $position);
{/dede:field.position}
代码解释:
$position = @me;: 将默认生成的路径字符串存入变量。$title = '{dede:field.title/}';: 获取当前文章或页面的标题,注意,这里需要使用{dede:field.title/}标签来获取值。preg_replace(...): 这是核心的替换逻辑。- 模式
/( > <a [^>]+>)([^<]+)(<\/a>)/用来匹配路径中最后一个链接部分。 >匹配分隔符。<a [^>]+>匹配<a href="...">这部分。([^<]+)匹配链接的文本(即标题)并捕获它。<\/a>匹配</a>。- 替换字符串
' > '.$title将匹配到的整个链接替换为“分隔符 + 标题(纯文本)”。
- 模式
常见问题与解决方案
问题1:当前位置不显示或显示异常
- 原因1: 模板文件中没有正确调用
{dede:field.position/}- 原因2: 栏目设置错误,如果文章所属的栏目没有正确设置上级栏目,路径就会中断。
- 原因3: 栏目“选择主页链接”为空,请确保栏目的“高级选项” -> “选择主页链接”已正确设置,通常设为“列表第一页”。
- 原因4: 自定义模型的文章,如果您使用了自定义模型,请确保模型字段中有与栏目关联的字段,并且模板中正确调用了。
问题2:首页链接不正确
- 原因: 首页的链接是固定的,通常是您的网站域名,如果您的首页使用了自定义的首页文件(如
index.html),需要检查后台“系统” -> “系统基本参数” -> “核心设置”中的“网站首页”是否正确。
问题3:如何去掉“首页”?
在某些情况下,您可能不需要显示“首页”这一项。
方法:使用 runphp 属性手动构建路径
{dede:field.position runphp='yes'}
// 去掉开头的 "首页 > "
$position = @me;
$pattern = '/首页( > )/';
@me = preg_replace($pattern, '', $position);
{/dede:field.position}
这个正则表达式会找到路径开头的“首页 > ”并将其替换为空字符串。
| 需求 | 代码示例 |
|---|---|
| 基本调用 | {dede:field.position/} |
| 修改分隔符 | {dede:field.position separator='»'/} |
| PHP自定义 | {dede:field.position runphp='yes'} @me = '自定义内容';{/dede:field.position} |
| 最后一项无链接 | 见上面的“进阶示例”代码块 |
| 去掉“首页” | 见上面的“常见问题”代码块 |
通过掌握 {dede:field.position/} 标签及其 separator 和 runphp 属性,您就可以灵活地控制 DedeCMS 网站中所有页面的面包屑导航了。
