我将为您详细解释,并提供最常用、最核心的代码示例。

核心方法:使用 {dede:field}
这是最直接、最常用的方法,在文章页(article_article.htm)或列表页(list_*.htm)中,当前内容所在的栏目ID可以通过 {dede:field typeid/} 获取,而这个栏目本身,也有一个它所属的父栏目ID,我们可以通过 typeid 的 topid 属性来获取。
页(article_article.htm)中调用父栏目ID
在文章页,当前文章属于哪个栏目,这个栏目的ID就是 {dede:field typeid/},要获取这个栏目的父栏目ID,使用以下代码:
{dede:field typeid function='GetTopid(@me)'/}
代码解析:
{dede:field typeid/}:获取当前文章所在栏目的ID。
function='GetTopid(@me)':这是一个自定义函数调用。
@me:代表 {dede:field typeid/} 的值,也就是当前栏目的ID。
GetTopid():这是织梦系统自带的一个核心函数,它的作用是根据一个栏目ID,返回其顶级父栏目的ID。
- 重要提示:如果当前栏目本身就是顶级栏目(没有父栏目),
GetTopid() 函数返回的值就是它自身的ID,如果你需要判断是否为顶级栏目,可以结合PHP代码来实现。
完整示例(在文章页模板中):
假设你想在文章页显示当前栏目的父栏目名称,并链接到父栏目列表页。
<h2>当前位置:</h2>
您的文章属于栏目:<a href="{dede:field name='typeid' function='GetTopid(@me)'/}">{dede:field name='typename'/}</a>
<br>
它的父栏目ID是:<strong>{dede:field typeid function='GetTopid(@me)'/}</strong>
<br>
它的父栏目名称是:<strong>{dede:field typeid function='GetTopid(@me)'/}</strong> <!-- 注意:这样写是错的,下面会解释如何正确获取父栏目名称 -->
在栏目列表页(list_*.htm)中调用父栏目ID
在列表页,逻辑和文章页完全一样,当前列表页所代表的栏目ID就是 {dede:field typeid/},调用父栏目ID的方法也是相同的。
{dede:field typeid function='GetTopid(@me)'/}
完整示例(在列表页模板中):
上方显示父栏目的信息。
<div class="breadcrumb">
当前栏目列表 - <a href="{dede:global.cfg_cmsurl/}/">{dede:global.cfg_webname/}</a>
> <a href="{dede:type typeid='0'}[field:typelink/]{/dede:type}">顶级栏目</a> <!-- 这只是一个示例,下面有更好的方法 -->
> 父栏目ID:<strong>{dede:field typeid function='GetTopid(@me)'/}</strong>
</div>
进阶用法与常见问题
如何获取父栏目的名称和链接?
上面的方法只能获取父栏目的ID,如果我们想获取父栏目的名称和链接,就需要使用嵌套的 {dede:type}
方法:先获取父栏目ID,再用 {dede:type} 根据ID获取信息
{dede:field typeid function='GetTopid(@me)'}
{dede:type id='@me'}
父栏目名称:<a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}
{/dede:field}
代码解析:
{dede:field typeid function='GetTopid(@me)'}:这部分执行后,会输出父栏目的ID,在 {dede:type} 标签中,这个ID会被作为 id 属性的值。
{dede:type id='@me'}:{dede:type} 标签可以根据指定的 id 来获取一个栏目的信息。
id='@me':这里的 @me 指代的是外层 {dede:field} 标签的输出结果,也就是我们刚刚获取到的父栏目ID。
[field:typelink/] 和 [field:typename/]:这是 {dede:type} 标签内的底层字段,分别代表栏目的链接和名称。
更简洁的写法(PHP代码块):
如果你对PHP比较熟悉,在模板中直接写PHP代码会更灵活和高效。
<?php
// 1. 获取当前栏目的ID
$current_typeid = $typeid;
// 2. 获取当前栏目的信息,从中得到父栏目ID
$current_type = GetOneType($current_typeid);
$parent_typeid = $current_type['topid']; // 'topid' 就是顶级父栏目的ID
// 3. 如果父栏目ID不等于当前栏目ID(说明不是顶级栏目),则获取父栏目信息
if ($parent_typeid != $current_typeid) {
$parent_type = GetOneType($parent_typeid);
echo "父栏目名称:<a href='".$parent_type['typedir']."'>".$parent_type['typename']."</a>";
} else {
echo "本栏目就是顶级栏目。";
}
?>
这种方法更可控,可以处理各种边界情况,比如判断是否为顶级栏目。
如何获取直接父栏目的ID,而不是顶级父栏目?
织梦默认的 GetTopid() 函数只能获取顶级父栏目,如果业务需求是获取上一级父栏目(直接父栏目),则需要使用PHP代码。
在文章页或列表页模板中添加以下PHP代码:
<?php
// 获取当前栏目的完整信息
$this_type = GetOneType($typeid);
// 'reid' 字段存储的就是直接父栏目的ID
$parent_typeid = $this_type['reid'];
// 如果存在直接父栏目
if ($parent_typeid > 0) {
// 获取直接父栏目的信息
$parent_type = GetOneType($parent_typeid);
echo "直接父栏目ID: " . $parent_typeid . "<br>";
echo "直接父栏目名称: <a href='".$parent_type['typedir']."'>".$parent_type['typename']."</a>";
} else {
echo "本栏目是顶级栏目,没有直接父栏目。";
}
?>
GetOneType() 函数返回的栏目信息数组常用字段:
id 或 typeid:栏目自身ID。
typename:栏目名称。
typedir:栏目链接。
reid:直接父栏目ID。
topid:顶级父栏目ID。
需求
代码
适用场景
获取顶级父栏目ID
{dede:field typeid function='GetTopid(@me)'/}
文章页、列表页
获取直接父栏目ID
<?php $this_type = GetOneType($typeid); echo $this_type['reid']; ?>
文章页、列表页
获取顶级父栏目名称和链接
{dede:field typeid function='GetTopid(@me)'}{dede:type id='@me'}[field:typename/] - [field:typelink/]{/dede:type}{/dede:field}
文章页、列表页
获取直接父栏目名称和链接
<?php $this_type = GetOneType($typeid); if($this_type['reid']>0){$p_type=GetOneType($this_type['reid']); echo $p_type['typename'];} ?>
文章页、列表页
希望这份详细的解释能帮助您在织梦开发中灵活地调用父栏目信息!
这是最直接、最常用的方法,在文章页(article_article.htm)或列表页(list_*.htm)中,当前内容所在的栏目ID可以通过 {dede:field typeid/} 获取,而这个栏目本身,也有一个它所属的父栏目ID,我们可以通过 typeid 的 topid 属性来获取。
页(article_article.htm)中调用父栏目ID
在文章页,当前文章属于哪个栏目,这个栏目的ID就是 {dede:field typeid/},要获取这个栏目的父栏目ID,使用以下代码:
{dede:field typeid function='GetTopid(@me)'/}
代码解析:
{dede:field typeid/}:获取当前文章所在栏目的ID。function='GetTopid(@me)':这是一个自定义函数调用。@me:代表{dede:field typeid/}的值,也就是当前栏目的ID。GetTopid():这是织梦系统自带的一个核心函数,它的作用是根据一个栏目ID,返回其顶级父栏目的ID。- 重要提示:如果当前栏目本身就是顶级栏目(没有父栏目),
GetTopid()函数返回的值就是它自身的ID,如果你需要判断是否为顶级栏目,可以结合PHP代码来实现。
完整示例(在文章页模板中):
假设你想在文章页显示当前栏目的父栏目名称,并链接到父栏目列表页。
<h2>当前位置:</h2>
您的文章属于栏目:<a href="{dede:field name='typeid' function='GetTopid(@me)'/}">{dede:field name='typename'/}</a>
<br>
它的父栏目ID是:<strong>{dede:field typeid function='GetTopid(@me)'/}</strong>
<br>
它的父栏目名称是:<strong>{dede:field typeid function='GetTopid(@me)'/}</strong> <!-- 注意:这样写是错的,下面会解释如何正确获取父栏目名称 -->
在栏目列表页(list_*.htm)中调用父栏目ID
在列表页,逻辑和文章页完全一样,当前列表页所代表的栏目ID就是 {dede:field typeid/},调用父栏目ID的方法也是相同的。
{dede:field typeid function='GetTopid(@me)'/}
完整示例(在列表页模板中): 上方显示父栏目的信息。
<div class="breadcrumb">
当前栏目列表 - <a href="{dede:global.cfg_cmsurl/}/">{dede:global.cfg_webname/}</a>
> <a href="{dede:type typeid='0'}[field:typelink/]{/dede:type}">顶级栏目</a> <!-- 这只是一个示例,下面有更好的方法 -->
> 父栏目ID:<strong>{dede:field typeid function='GetTopid(@me)'/}</strong>
</div>
进阶用法与常见问题
如何获取父栏目的名称和链接?
上面的方法只能获取父栏目的ID,如果我们想获取父栏目的名称和链接,就需要使用嵌套的 方法:先获取父栏目ID,再用 代码解析: 更简洁的写法(PHP代码块): 如果你对PHP比较熟悉,在模板中直接写PHP代码会更灵活和高效。 这种方法更可控,可以处理各种边界情况,比如判断是否为顶级栏目。 织梦默认的 在文章页或列表页模板中添加以下PHP代码: 希望这份详细的解释能帮助您在织梦开发中灵活地调用父栏目信息!{dede:type}
{dede:type} 根据ID获取信息{dede:field typeid function='GetTopid(@me)'}
{dede:type id='@me'}
父栏目名称:<a href="[field:typelink/]">[field:typename/]</a>
{/dede:type}
{/dede:field}
{dede:field typeid function='GetTopid(@me)'}:这部分执行后,会输出父栏目的ID,在 {dede:type} 标签中,这个ID会被作为 id 属性的值。{dede:type id='@me'}:{dede:type} 标签可以根据指定的 id 来获取一个栏目的信息。
id='@me':这里的 @me 指代的是外层 {dede:field} 标签的输出结果,也就是我们刚刚获取到的父栏目ID。[field:typelink/] 和 [field:typename/]:这是 {dede:type} 标签内的底层字段,分别代表栏目的链接和名称。<?php
// 1. 获取当前栏目的ID
$current_typeid = $typeid;
// 2. 获取当前栏目的信息,从中得到父栏目ID
$current_type = GetOneType($current_typeid);
$parent_typeid = $current_type['topid']; // 'topid' 就是顶级父栏目的ID
// 3. 如果父栏目ID不等于当前栏目ID(说明不是顶级栏目),则获取父栏目信息
if ($parent_typeid != $current_typeid) {
$parent_type = GetOneType($parent_typeid);
echo "父栏目名称:<a href='".$parent_type['typedir']."'>".$parent_type['typename']."</a>";
} else {
echo "本栏目就是顶级栏目。";
}
?>
如何获取直接父栏目的ID,而不是顶级父栏目?
GetTopid() 函数只能获取顶级父栏目,如果业务需求是获取上一级父栏目(直接父栏目),则需要使用PHP代码。<?php
// 获取当前栏目的完整信息
$this_type = GetOneType($typeid);
// 'reid' 字段存储的就是直接父栏目的ID
$parent_typeid = $this_type['reid'];
// 如果存在直接父栏目
if ($parent_typeid > 0) {
// 获取直接父栏目的信息
$parent_type = GetOneType($parent_typeid);
echo "直接父栏目ID: " . $parent_typeid . "<br>";
echo "直接父栏目名称: <a href='".$parent_type['typedir']."'>".$parent_type['typename']."</a>";
} else {
echo "本栏目是顶级栏目,没有直接父栏目。";
}
?>
GetOneType() 函数返回的栏目信息数组常用字段:
id 或 typeid:栏目自身ID。typename:栏目名称。typedir:栏目链接。reid:直接父栏目ID。topid:顶级父栏目ID。
需求
代码
适用场景
获取顶级父栏目ID
{dede:field typeid function='GetTopid(@me)'/}文章页、列表页
获取直接父栏目ID
<?php $this_type = GetOneType($typeid); echo $this_type['reid']; ?>文章页、列表页
获取顶级父栏目名称和链接
{dede:field typeid function='GetTopid(@me)'}{dede:type id='@me'}[field:typename/] - [field:typelink/]{/dede:type}{/dede:field}文章页、列表页
获取直接父栏目名称和链接
<?php $this_type = GetOneType($typeid); if($this_type['reid']>0){$p_type=GetOneType($this_type['reid']); echo $p_type['typename'];} ?>文章页、列表页
