当前位置的作用
- 用户体验:让用户知道自己“身在何处”,了解网站的层级结构,降低用户的迷失感。
- SEO优化:为搜索引擎提供清晰的网站结构信息,有助于蜘蛛理解网站层级,并对内页的权重传递有一定帮助。
- 网站结构化:强制站长规划好网站的栏目和文章分类,使网站结构更加清晰、规范。
当前位置的实现原理
在 DedeCMS 中,“当前位置”是通过一个专门的函数 GetHeadlink() 来实现的。

- 函数名称:
GetHeadlink() - 存放位置:这个函数定义在
/include/typelink.class.php文件中。 - 工作方式:当你在模板中调用这个函数时,它会根据当前页面的ID(如文章ID、栏目ID),自动向上追溯其所有父级栏目,直到首页,然后按照“首页 > 一级栏目 > 二级栏目 > ... > 当前页面”的格式,生成一个完整的导航链接列表。
如何在模板中调用当前位置
根据不同的页面类型(首页、列表页、内容页),调用的方法和标签略有不同。
首页
首页通常不需要显示当前位置,或者只显示“首页”,你可以这样写:
<a href='{dede:global.cfg_cmsurl/}/'>首页</a>
或者直接调用函数,它也只会返回“首页”:
{dede:field name='position'/}
列表页
列表页是栏目页,当前位置会显示从首页到当前栏目的路径。

使用 position 字段(最常用)
在列表页模板文件(通常是 使用 这种方法更灵活,可以自定义分隔符和样式。 页的当前位置会显示从首页到文章所属栏目的完整路径。 使用 在文章页模板文件(通常是 使用 同样,这种方法可以更灵活地控制输出。 默认的 默认的分隔符是 有时候你可能不希望“首页”是可点击的链接,只是一个文字,可以这样处理: 示例解释:
原因分析:
这通常是因为文章或栏目没有被正确地分配到具体的栏目下,文章的所属栏目ID( 解决方法: 原因分析:
你为 解决方法: 解决方法:
在模板文件中,可以使用 在首页模板 ( 在列表页 ( 页 ( 理解 /templets/default/list_article.htm)中,直接使用 position
<div class="position">
{dede:field name='position'/}
</div>
GetHeadlink() 函数<div class="position">
{dede:field name='typeid' function="GetHeadlink(@me)"/}
</div>
内容页(文章页)

position 字段(最常用)/templets/default/article_article.htm)中,直接使用 position
<div class="position">
{dede:field name='position'/}
</div>
GetHeadlink() 函数<div class="position">
{dede:field name='typeid' function="GetHeadlink(@me)"/}
</div>
自定义当前位置的样式和分隔符
position 标签输出格式是固定的,如果你想要自定义它的样式、分隔符,或者在某些特殊情况下不显示,可以采用以下方法。自定义分隔符
>,如果你想改成其他符号,,可以使用 str_replace 函数。<div class="position">
{dede:field name='position' runphp='yes'}
$current = @me;
$str = str_replace(' > ', ' / ', $current);
@me = $str;
{/dede:field}
</div>
去掉“首页”链接
<div class="position">
<a href='{dede:global.cfg_cmsurl/}/'>首页</a>
{dede:field name='position' runphp='yes'}
$current = @me;
// 去掉 "首页 > " 这部分
$str = str_replace('<a href='{dede:global.cfg_cmsurl/}/'>首页</a> > ', '', $current);
@me = $str;
{/dede:field}
</div>
使用更灵活的
GetHeadlink() 函数(推荐)GetHeadlink() 函数本身可以接受参数,实现更精细的控制。<div class="position">
{dede:field name='typeid' function="GetHeadlink(@me, ' » ', ' » ', '')"/}
</div>
GetHeadlink() 函数的参数说明(顺序很重要):
@me)。»)'yes' 显示,'no' 不显示。{dede:field name='typeid' function="GetHeadlink(@me, ' > ', ' > ', 'no')"/}
这段代码的输出效果是:一级栏目 > 二级栏目 > 当前栏目名称(“首页”被去掉了)。
常见问题与解决
问题1:当前位置显示不正确,比如显示为“首页 > 未分类”或“首页 > 栏目名称 > 未分类”
typeid 字段)可能为0,或者指向了一个不存在的栏目。
问题2:当前位置的样式不生效,或者被其他CSS覆盖
.position 类写的CSS样式可能被其他更优先的CSS规则覆盖了,或者CSS文件没有正确加载。
.position 的最终应用样式,看看是哪个CSS规则在起作用,并调整你的CSS选择器以提高优先级。.position 样式的CSS文件。问题3:想只在列表页和内容页显示当前位置,首页不显示
dede 的条件判断标签。index.htm) 中,不添加当前位置代码。list_article.htm) 中:{dede:field.title runphp='yes'}
if(@me != '') {
echo '<div class="position">';
echo '{dede:field.name/position}';
echo '</div>';
}
{/dede:field.title}
article_article.htm) 中:**{dede:field.title runphp='yes'}
if(@me != '') {
echo '<div class="position">';
echo '{dede:field.name/position}';
echo '</div>';
}
{/dede:field.title}
页面类型
最常用方法
自定义方法
首页
通常不显示
<a href='{dede:global.cfg_cmsurl/}/'>首页</a>
列表页
{dede:field.name='position'/}{dede:field.name='typeid' function="GetHeadlink(@me, ' » ', ' » ', '')"/}position 字段和 GetHeadlink() 函数的用法,是掌握 DedeCMS 导航的关键,希望这份详细的解释能帮助你更好地管理和自定义你的网站导航。
