菜鸟科技网

织梦如何调用父级栏目?

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

织梦如何调用父级栏目?-图1
(图片来源网络,侵删)

调用父级栏目名称

在子栏目列表页或内容页中,若需获取当前栏目的父级栏目名称,可使用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代码。

织梦如何调用父级栏目?-图2
(图片来源网络,侵删)

调用多级父栏目信息

若需调用多级父栏目(如祖父栏目),可通过循环嵌套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}

常见应用场景示例

以下是父级栏目调用的典型应用场景及代码:

织梦如何调用父级栏目?-图3
(图片来源网络,侵删)
应用场景 代码示例
面包屑导航(显示父级栏目) {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:使用typeidreid字段判断:

{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}
分享:
扫描分享到社交APP
上一篇
下一篇