在 DedeCMS 中,“当前位置”通常指的是“面包屑导航”(Breadcrumb Navigation),它用于显示用户在网站中的当前位置,首页 > 新闻中心 > 公司新闻,这对于用户体验和 SEO 都非常重要。

DedeCMS 提供了专门的标签来实现这个功能,最常用的是 这是最基础、最常用的当前位置标签,它会自动根据当前页面的层级(首页、栏目、文章等)生成面包屑导航。 直接在模板文件(通常是 在不同页面,这个标签的输出内容不同: 默认的分隔符是 示例:使用 示例:使用 作为分隔符 默认情况下,生成的链接是 示例:给链接添加 这会生成类似这样的 HTML: 当你需要更精细地控制面包屑的每一个部分时(比如给最后一项“文章标题”不加链接),可以使用循环标签 假设我们想在文章页,文章标题本身不显示为链接,只有前面的导航是链接,我们可以利用 代码解释: 原因分析: 解决方案:
如果你希望在首页也显示“首页”,可以手动添加。 解决方案:
这是 CSS 样式问题,不是标签本身的问题,你可以通过 CSS 来控制面包屑容器的样式, 对于绝大多数情况,直接使用 {dede:field name='position'/}
核心标签:
{dede:field name='position'/}基本用法
article_article.htm 文章页、list_category.htm 列表页等)的相应位置放入以下代码即可:<div class="breadcrumb">
{dede:field name='position'/}
</div>
默认输出效果
index.php):通常不显示或只显示“首页”。list.php?tid=X):显示 首页 > 栏目名称article.php?aid=X):显示 首页 > 栏目名称 > 文章标题自定义分隔符
>,如果你想使用其他符号(如 或 >),可以通过 separator 属性来修改。
> 作为分隔符{dede:field name='position' separator='>' /}
{dede:field name='position' separator='|' /}
自定义链接样式
<a> 标签,文本是 首页、栏目名 等,如果你想给链接添加 CSS 类名,可以使用 linktype 属性。class="nav-link"
{dede:field name='position' linktype='a' /}
<a href='/' class='nav-link'>首页</a> > <a href='/news/' class='nav-link'>新闻中心</a> > 公司新闻
进阶用法:
{dede:position} ... {/dede:position} 循环标签{dede:position}。基本用法
<div class="breadcrumb">
<a href='{dede:global.cfg_cmsurl/}/'>首页</a>
{dede:position}
<a href='[field:link/]'>[field:title/]</a>
{/dede:position}
</div>
标签详解
{dede:position}: 开始循环,它会遍历当前位置的每一个节点(首页、上级栏目、当前栏目等)。[field:link/]: 当前节点的链接地址。[field:title/]: 当前节点的标题。{/dede:position}: 结束循环。进阶示例:让最后一项不可点击
position 标签的 runphp 属性来判断。<div class="breadcrumb">
<a href='{dede:global.cfg_cmsurl/}/'>首页</a>
{dede:position runphp='yes'}
$GLOBALS['autoindex']++; // 获取当前循环的索引号
$total = @me; // 获取总节点数
$a = "<a href='[field:link/]'>[field:title/]</a>";
$b = "[field:title/]";
if ($GLOBALS['autoindex'] == $total) {
// 如果是最后一个节点
@me = $b;
} else {
// 如果不是最后一个节点
@me = $a;
}
{/dede:position}
</div>
runphp='yes' 启用了 PHP 代码执行。$GLOBALS['autoindex']++ 和 $total = @me; 是 DedeCMS 循环标签中获取索引和总数的小技巧。if ($GLOBALS['autoindex'] == $total) 来判断当前是否是最后一个节点。[field:title/]。<a>
常见问题与解决方案
问题1:首页不显示“首页”
{dede:field name='position'/} 在首页默认不输出任何内容,因为用户已经在首页。<div class="breadcrumb">
{dede:field name='position' runphp='yes'}
if(@me == '') {
@me = "<a href='{dede:global.cfg_cmsurl/}/'>首页</a>";
} else {
@me = "<a href='{dede:global.cfg_cmsurl/}/'>首页</a>" . @me;
}
{/dede:field}
</div>
问题2:栏目名称或文章标题过长,导致面包屑换行
.breadcrumb {
font-size: 14px;
line-height: 1.5;
white-space: nowrap; /* 防止文字换行 */
overflow: hidden; /* 隐藏超出部分 */
text-overflow: ellipsis; /* 用省略号表示被隐藏的部分 */
}
.breadcrumb a {
color: #666;
text-decoration: none;
}
.breadcrumb a:hover {
color: #ff6600;
text-decoration: underline;
}
需求场景
推荐标签
示例代码
简单使用,快速实现
{dede:field name='position'/}{dede:field name='position' separator='>' /}
自定义链接样式
{dede:field name='position'/}{dede:field name='position' linktype='a' class='nav-link' /}
精细控制每个节点
{dede:position}...{/dede:position}<a href='[field:link/]'>[field:title/]</a>
复杂逻辑(如最后一项无链接)
{dede:position runphp='yes'}...{/dede:position}见上文“进阶示例”部分
{dede:field name='position'/} 就足够了,只有在需要高度定制化时,才需要使用循环标签 {dede:position}。
