在织梦CMS(DedeCMS)中,调用父级栏目的信息是网站开发中常见的需求,例如在面包屑导航、子栏目列表页或内容页中显示上级栏目的名称、链接或描述等,织梦提供了灵活的标签机制,支持多种方式调用父级栏目信息,以下将详细介绍具体实现方法。

调用父级栏目名称
在子栏目列表页或内容页中,若需获取当前栏目的父级栏目名称,可使用GetTopTypename
函数,该函数通过当前栏目的ID递归查询顶级栏目,但需注意,若需直接获取一级父栏目(非顶级),需结合typeid
参数与INSTR
函数处理,在子栏目列表页中,可通过以下代码调用父级栏目名称:
{dede:field name='typeid' runphp='yes'} global $dsql; $sonid = @me; $fatherid = $dsql->GetOne("SELECT reid FROM `dede_arctype` WHERE id='$sonid'"); @me = $fatherid['reid'] ? $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id='".$fatherid['reid']."'")['typename'] : ''; {/dede:field}
上述代码中,首先通过当前栏目ID查询其父栏目ID(reid
),再根据父栏目ID获取名称。
调用父级栏目链接
若需在页面中生成父级栏目的跳转链接,可结合typelink
标签与GetOne
函数实现,在内容页调用父级栏目链接:
{dede:field name='typeid' runphp='yes'} global $dsql; $sonid = @me; $fatherid = $dsql->GetOne("SELECT reid FROM `dede_arctype` WHERE id='$sonid'"); if($fatherid['reid']){ $fatherinfo = $dsql->GetOne("SELECT id,typename FROM `dede_arctype` WHERE id='".$fatherid['reid']."'"); @me = "<a href='/plus/list.php?tid=".$fatherinfo['id']."'>".$fatherinfo['typename']."</a>"; }else{ @me = ""; } {/dede:field}
代码中,先获取父栏目ID,再查询父栏目的ID与名称,最后生成带链接的HTML代码。

调用多级父栏目信息
若需调用多级父栏目(如祖父栏目),可通过循环嵌套GetOne
函数实现,调用当前栏目的顶级栏目名称:
{dede:field name='typeid' runphp='yes'} global $dsql; $tid = @me; while($reid = $dsql->GetOne("SELECT reid FROM `dede_arctype` WHERE id='$tid'")['reid']){ $topid = $tid; $tid = $reid; } $topinfo = $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id='$tid'"); @me = $topinfo['typename']; {/dede:field}
此代码通过循环向上查询reid
,直到顶级栏目(reid
为0时停止)。
调用父级栏目描述与关键字
若需调用父级栏目的描述(description
)或关键字(`keywords``),可修改上述SQL查询字段。
{dede:field name='typeid' runphp='yes'} global $dsql; $sonid = @me; $fatherid = $dsql->GetOne("SELECT reid FROM `dede_arctype` WHERE id='$sonid'"); @me = $fatherid['reid'] ? $dsql->GetOne("SELECT description FROM `dede_arctype` WHERE id='".$fatherid['reid']."'")['description'] : ''; {/dede:field}
常见应用场景示例
以下是父级栏目调用的典型应用场景及代码:

应用场景 | 代码示例 |
---|---|
面包屑导航(显示父级栏目) | {dede:field name='typename'/} > {dede:field name='typeid' runphp='yes'}...(调用父级名称){/dede:field} |
子栏目列表页显示父级链接 | <a href="{dede:field name='typeid' runphp='yes'}...(生成父级链接){/dede:field}">返回上级</a> |
相关问答FAQs
Q1:在子栏目列表页如何调用顶级栏目名称?
A1:可通过以下代码实现:
{dede:field name='typeid' runphp='yes'} global $dsql; $tid = @me; do{ $row = $dsql->GetOne("SELECT reid,typename FROM `dede_arctype` WHERE id='$tid'"); $topid = $tid; $tid = $row['reid']; }while($row['reid']>0); @me = $row['typename']; {/dede:field}
Q2:如何判断当前栏目是否有父级栏目?
A2:使用typeid
与reid
字段判断:
{dede:field name='typeid' runphp='yes'} global $dsql; $sonid = @me; $fatherid = $dsql->GetOne("SELECT reid FROM `dede_arctype` WHERE id='$sonid'"); @me = $fatherid['reid'] ? "有父级栏目" : "无父级栏目"; {/dede:field}