但由于手机站的模板结构通常更独立,你需要确保这个标签被正确地放置在手机站的模板文件中。

下面我将为你详细讲解实现步骤、注意事项以及一些进阶用法。
核心原理
DedeCMS 的 position(位置)信息是在内容被读取时,系统根据你设置的栏目结构(顶级栏目 -> 二级栏目 -> ... -> 文档)自动生成的,这个信息被存储在 arc.archives.class.php 文件中,并最终通过 {dede:field name='position'/} 标签渲染出来。
关键点:
- 标签本身:
{dede:field name='position'/} - 适用页面页、列表页、自定义页面等几乎所有可以获取栏目信息的页面。
- 模板文件:你需要将此标签放入手机站对应的模板文件里。
基本实现步骤(文章内容页)
这是最常见的需求,即在手机文章详情页显示“首页 > 栏目 > 子栏目 > 文章标题”这样的路径。

步骤 1:确认手机站模板文件
手机站的文章内容页模板文件通常位于 /templets/default/ 目录下,文件名可能是 article_article.htm 或者你在后台设置的手机内容页模板。
步骤 2:在模板中插入标签
打开你的手机文章内容页模板文件(article_article.htm),找到你希望显示面包屑导航的位置(通常是标题的上方),然后插入以下标签:
<div class="position">
<span>当前位置:</span>
{dede:field name='position'/}
</div>
代码解释:
<div class="position">...</div>:这是一个div容器,你可以用它来添加 CSS 样式,使其在手机上看起来更美观(例如调整字体大小、颜色、间距等)。<span>当前位置:</span>:这是可选的提示文字,你也可以不要它。{dede:field name='position'/}:这是核心标签,它会自动输出当前位置的路径链接。
步骤 3:更新缓存并测试
- 保存模板文件。
- 登录 DedeCMS 后台,点击顶部菜单的 “生成” -> “更新主页HTML” -> “更新栏目” -> “更新文档HTML”。
- 为了确保效果,建议执行一次 “更新文档HTML”,这样所有文章页面都会重新生成,应用新的模板代码。
- 访问你的手机站文章页面,查看是否正确显示了当前位置。
进阶用法与常见问题解决
自定义分隔符
默认情况下,{dede:field name='position'/} 的分隔符是 >,如果你想修改它,可以使用 separator 属性。
示例:使用 >> 作为分隔符
{dede:field name='position' separator=' >> '/}
示例:使用 作为分隔符
{dede:field name='position' separator=' / '/}
去掉首页链接
有时候你可能不希望路径中包含“首页”的链接,可以通过自定义一个函数来实现。
方法:修改 /include/helpers/extend.helper.php 文件
- 打开
/include/helpers/extend.helper.php文件。 - 在文件末尾
?>之前,添加如下函数:
if ( ! function_exists('GetPositionNoHome'))
{
function GetPositionNoHome($aid)
{
global $dsql;
$tags = '';
$arrQuery = "SELECT tp.topid,tp.reid,tp.id,tp.typename,tp.ispart,tp.namerule,tp.moresite,tp.siteurl,tp.sitepath,tp.corank,tp.description,tp.keywords,tp.seotitle,tp.isdefault,tp.moresite,tp.siteurl,tp.sitepath
FROM `dede_arctype` tp
LEFT JOIN `dede_arctype` tp2 ON tp.reid = tp2.id
WHERE tp.id IN (SELECT typeid FROM `dede_archives` WHERE id='$aid') ORDER BY tp.topid,tp.reid,tp.id";
$dsql->Execute('me',$arrQuery);
while($row=$dsql->GetArray('me'))
{
$tags .= "<a href='".$row['typeurl']."'>".$row['typename']."</a> ";
}
return $tags;
}
}
注意: dede_ 是你的数据库表前缀,如果你的不是这个,请自行修改。
- 在你的手机站模板文件中,调用这个自定义函数:
{dede:field name='id' function='GetPositionNoHome(@me)'/}这段代码会输出类似“
栏目A > 栏目B”的路径,不包含首页。
在手机首页或列表页调用
- 首页 (
index.htm):首页通常没有“当前位置”的概念,但如果你想显示“首页”本身,可以手动写死:<div class="position"> <a href='/m/'>首页</a> </div> - 栏目列表页 (
list_article.htm):在列表页调用position会显示从首页到当前栏目的路径。<div class="position"> {dede:field name='position'/} </div>如果你在“科技”栏目下,它会显示“
首页 > 科技”。
手机站栏目页面包屑不显示(最常见问题)
问题现象:电脑站文章页正常,但手机站文章页的 {dede:field name='position'/} 不显示任何内容。
原因分析: 这通常是因为你的手机站使用了独立模板,在 DedeCMS 中,手机站和电脑站可以有不同的模板体系,你在电脑站模板里修改了标签,但手机站使用的是另一套独立的模板文件,所以没有生效。
解决方案:
- 确认模板文件:进入后台的 “模板” -> “手机模板” -> “默认模板设置”。
- 找到对应的模板:查看“文章内容页模板”设置的是什么文件,它很可能不是
/templets/default/article_article.htm,而是/templets/mobile/default/article_article.htm或者其他路径下的文件。 - 修改正确的模板:打开后台“手机模板”里指定的那个文章内容页模板文件,将
{dede:field name='position'/}标签添加进去。 - 更新缓存:再次执行生成操作,更新手机站的页面。
| 需求场景 | 解决方案 |
|---|---|
| 基本文章页面包屑 | 在手机站文章内容页模板(如 article_article.htm)中添加 <div>{dede:field name='position'/}</div>。 |
| 修改分隔符 | 使用 {dede:field name='position' separator='你的符号'/}。 |
| 去掉首页链接 | 在 extend.helper.php 中添加自定义函数 GetPositionNoHome,并在模板中用 {dede:field name='id' function='GetPositionNoHome(@me)'/} 调用。 |
| 面包屑不显示 | 检查并修改后台 “手机模板” 设置中的对应模板文件,而不是电脑站的模板。 |
| 列表页面包屑 | 在手机站列表页模板(如 list_article.htm)中使用 {dede:field name='position'/}。 |
遵循以上步骤,你就可以轻松地在 DedeCMS 手机站中实现并自定义当前位置(面包屑导航)的显示了。
