最常用、最标准的方法(推荐)
这是织梦官方提供的标准标签,适用于99%的场景,包括首页、列表页和内容页。

(图片来源网络,侵删)
标签代码
{dede:field name='position'/}
代码解析
{dede:field ...}:这是调用单值字段内容的标签。name='position':指定要调用的字段名称为position,这个字段在织梦的数据表里存储了当前页面的完整路径。
效果示例
假设你的网站结构是:
首页 -> 技术文章 -> 织梦CMS -> 如何调用当前位置
当你访问这篇“如何调用当前位置”的文章时,使用 {dede:field name='position'/} 会输出:
首页 > 技术文章 > 织梦CMS > 如何调用当前位置
> 是默认的分隔符。
自定义分隔符和链接样式
标准方法虽然方便,但样式比较单一,很多时候我们需要自定义分隔符,或者希望路径中的每个部分都是可点击的链接。
标签代码
{dede:field name='position' runphp='yes'}
$tc = explode(' > ', @me);
@me = '';
for($i=0;$i<count($tc)-1;$i++){
if($i<count($tc)-2){
@me .= '<a href="'.GetOneTypeUrlA($tc[$i]).'">'.$tc[$i].'</a> <span> > </span> ';
}else{
@me .= '<a href="'.GetOneTypeUrlA($tc[$i]).'">'.$tc[$i].'</a> <span> > </span> ';
}
}
@me .= trim($tc[count($tc)-1]);
{/dede:field}
代码解析
runphp='yes':开启PHP执行功能,允许我们在标签内写PHP代码。$tc = explode(' > ', @me);:将默认的路径字符串(如“首页 > 技术文章”)按>分割成一个数组$tc。@me = '';:清空原始的@me变量,准备重新拼接内容。for($i=0;$i<count($tc)-1;$i++):循环遍历这个数组,-1是为了跳过最后一个元素(即当前文章标题,它通常不需要链接)。GetOneTypeUrlA($tc[$i]):这是一个织梦内置的函数,用于根据栏目名获取其链接地址。@me .= '<a href='...'>...</a> <span> > </span> ';:将每个栏目名包裹在<a>标签中,并加上我们自定义的<span>分隔符。@me .= trim($tc[count($tc)-1]);:将数组的最后一个元素(当前页标题)直接拼接到后面,不加链接。
效果示例
使用上面的代码,输出会是HTML格式,方便你用CSS控制样式:
<a href="/">首页</a> <span> > </span> <a href="/ji shu wen zhang/">技术文章</a> <span> > </span> <a href="/ji shu wen zhang/zhimengcms/">织梦CMS</a> <span> > </span> 如何调用当前位置
你可以轻松地通过CSS给 <a> 和 <span> 添加样式,
.breadcrumb a {
color: #007bff;
text-decoration: none;
}
.breadcrumb a:hover {
text-decoration: underline;
}
.breadcrumb span {
color: #999;
margin: 0 5px;
}
更简洁的PHP循环写法
上面的方法虽然功能强大,但代码略显复杂,这里提供一个更简洁、同样功能强大的版本。
标签代码
{dede:field name='position' runphp='yes'}
$arr = explode(' > ', @me);
$result = '';
for($i=0; $i<count($arr)-1; $i++){
$result .= "<a href='".GetOneTypeUrlA($arr[$i])."'>".$arr[$i]."</a> <span> » </span> ";
}
$result .= end($arr);
@me = $result;
{/dede:field}
与方法二的区别
- 使用
$arr = explode(' > ', @me);定义数组变量名更清晰。 - 使用
end($arr)函数来获取数组的最后一个元素,代码更简洁。 - 分隔符换成了 ,你可以自由修改。
在不同页面中的使用
在首页(index.htm)
在首页调用,通常只显示“首页”本身。
{dede:field name='position'/}
输出:首页
在列表页(list_article.htm)
在栏目列表页,会显示从首页到当前栏目的路径。
{dede:field name='position'/}
在“技术文章”栏目列表页,输出:
首页 > 技术文章
页(article_article.htm)
页,会显示从首页到文章所在栏目再到文章本身的完整路径。
{dede:field name='position'/}
在“如何调用当前位置”这篇文章页,输出:
首页 > 技术文章 > 织梦CMS > 如何调用当前位置
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
{dede:field name='position'/} |
最简单、最标准,无需任何额外代码。 | 样式固定,无法自定义分隔符和链接。 | 对样式要求不高的快速开发,或作为后台默认选项。 |
| 方法二/三:PHP循环 | 功能强大、灵活,可完全自定义HTML结构、样式和分隔符。 | 代码稍复杂,需要一点PHP基础。 | 强烈推荐,几乎所有商业网站和追求用户体验的项目都应使用此方法。 |
最佳实践建议:
为了保持网站模板的整洁和可维护性,推荐你:
- 在模板中直接使用方法二或方法三,这样一步到位,生成的代码就是最终需要的HTML结构。
- 将自定义的分隔符(如
<span> > </span>)提取出来,用CSS类来控制,这样以后想修改样式时,只需修改CSS文件即可,无需改动PHP代码。
将方法三的代码优化一下:
{dede:field name='position' runphp='yes'}
$arr = explode(' > ', @me);
$result = '';
for($i=0; $i<count($arr)-1; $i++){
$result .= "<a href='".GetOneTypeUrlA($arr[$i])."'>".$arr[$i]."</a><i class='fas fa-angle-right'></i>"; // 使用图标作为分隔符
}
$result .= end($arr);
@me = $result;
{/dede:field}
然后在CSS中定义 .fa-angle-right 图标的样式,这样代码和样式就分离了。
