这个标签主要用于调用当前栏目的上级栏目名称。

(图片来源网络,侵删)
field:spacename 的核心作用
field:spacename 就是用来获取“当前栏目”的“父栏目”或“上级栏目”的名称。
它的主要应用场景包括:
- 面包屑导航:这是最常见的用法,在面包屑中,你通常会显示
首页 > 父栏目名 > 当前栏目名。field:spacename就可以用来获取这个“父栏目名”。 - 或描述:在列表页或内容页,你可能想在页面标题或描述中包含上级栏目的信息,以增加SEO友好性。
- 特定样式展示:根据上级栏目的不同,为当前栏目应用不同的样式或布局。
基本语法和使用方法
field:spacename 通常在循环标签 {dede:channel} 或 {dede:arclist} 等内部使用,用于循环调用栏目信息。
语法格式:
{dede:channel type='top' /} <!-- 调用顶级栏目 -->
{dede:channel type='son' /} <!-- 调用当前栏目的子栏目 -->
{dede:channel type='self' /} <!-- 调用当前栏目本身 -->
在这些循环标签内部,你可以使用 field:spacename 来获取特定栏目的上级栏目名。

(图片来源网络,侵删)
示例1:在面包屑导航中使用
假设你的栏目结构是:首页 > 科技 > 手机 > 苹果手机。
当你在“苹果手机”这个栏目页时,你希望面包屑显示为 首页 > 科技 > 手机 > 苹果手机。
你的模板代码可以这样写:
<div class="breadcrumb">
<a href="{dede:global.cfg_cmsurl/}/">首页</a>
{dede:field name='position' runphp='yes'}
// 这里的PHP代码是为了处理栏目路径,去掉最后一个(即当前栏目)
$tc = @me;
$tf = split('<a href=', $tc);
$tnum = count($tf) - 1;
$tfmt = '';
for($i=1;$i<$tnum;$i++){
$tfmt .= "<a href=".$tf[$i];
}
$tfmt = preg_replace('/\/ target="_blank">/','>',$tfmt);
@me = $tfmt;
{/dede:field}
<span>{dede:field.title/}</span> <!-- 当前栏目名 -->
</div>
上面的代码使用了 {dede:field name='position'},它本身会生成一个包含所有上级栏目的链接,而 field:spacename 在这里不太适合直接用在面包屑中,因为它只返回一个名字,不带链接。
field:spacename 在哪里最方便呢?
示例2:在列表页调用上级栏目名
假设你在“手机”这个列表页,你想在页面标题上方显示“本栏目属于:科技”。
在 list_栏目ID.htm 模板文件中:
<h1>{dede:field.title/}</h1> <!-- 输出:手机 -->
<p>本栏目属于:<strong>{dede:field.spacename/}</strong></p> <!-- 输出:科技 -->
这里的 {dede:field.spacename/} 就会自动获取到“手机”这个栏目的父栏目“科技”的名称。
示例3:在内容页调用上级栏目名
页 article_articleid.htm 中,你可能想在文章标题旁加上所属的顶级栏目名。
<div class="article-header">
<h1>{dede:field.title/}</h1>
<div class="article-info">
<span>来源:{dede:field.source/}</span>
<span>栏目:<a href="{dede:field.typeurl/}">{dede:field.typename/}</a></span> <!-- 当前栏目 -->
<span>上级栏目:<a href="{dede:field.spacetypeurl/}">{dede:field.spacename/}</a></span> <!-- 上级栏目 -->
</div>
</div>
在这个例子中,{dede:field.spacename/} 获取的是文章所在栏目的父栏目名,为了能点击跳转,织梦还提供了对应的URL标签:
{dede:field.spacename/}: 上级栏目名{dede:field.spacetypeurl/}: 上级栏目链接
注意事项和常见问题
- 顶级栏目:如果当前栏目本身就是顶级栏目(科技”),那么它没有父栏目。
{dede:field.spacename/}将返回空值。 - 栏目类型:
field:spacename主要用于“栏目频道”(外部栏目),对于“独立页面”(内部栏目),其上级栏目逻辑可能不同,使用时需注意。 - 模板位置:确保
{dede:field.spacename/}被放置在正确的模板文件中,它只能在列表页模板(list_xxx.htm页模板(article_xxx.htm)中生效,而不能在首页模板(index.htm)中直接使用。 - 与
typename的区别:{dede:field.typename/}:获取当前栏目的名称。{dede:field.spacename/}:获取当前栏目的父栏目的名称。
| 作用 | 适用场景 | 示例输出 | |
|---|---|---|---|
{dede:field.typename/} |
获取当前栏目的名称 | 列表页、内容页显示当前栏目名 | 手机 |
{dede:field.spacename/} |
获取当前栏目的父栏目的名称 | 列表页、内容页显示上级栏目名 | 科技 |
{dede:field.position/} |
获取从首页到当前栏目的完整路径(带链接) | 面包屑导航 | 首页 > 科技 > 手机 |
field:spacename 是一个功能明确且非常实用的标签,能帮助你轻松构建出层级清晰、信息丰富的网站页面,在使用时,只需记住它的核心功能——“获取父栏目名”,并注意其在顶级栏目下的空值情况即可。
