使用帝国CMS进行网站开发时,经常需要获取当前栏目的顶级栏目名称,用于页面标题、导航面包屑或SEO优化。以下是几种常用的调用方法,适用于模板中直接使用PHP代码的情况。

1. 使用内置变量和SQL查询获取顶级栏目名称

帝国CMS中每个栏目都有一个bclassid字段表示其父栏目ID。通过循环查找直到父ID为0,即可得到顶级栏目。

在内容页或列表页模板中启用“使用程序代码”后,可插入以下PHP代码:

<?php

$cr = $empire->fetch1("SELECT * FROM {$dbtbpre}enewsclass WHERE classid='$GLOBALS[navclassid]'");

$topbclassid = $cr['bclassid'];

if($topbclassid == 0) {

$topclassid = $GLOBALS['navclassid'];

} else {

while($topbclassid != 0) {

$cr2 = $empire->fetch1("SELECT * FROM {$dbtbpre}enewsclass WHERE classid='$topbclassid'");

if($cr2['bclassid'] == 0) {

$topclassid = $topbclassid;

break;

} else {

$topbclassid = $cr2['bclassid'];

}

}

}

$topclassr = $empire->fetch1("SELECT classname FROM {$dbtbpre}enewsclass WHERE classid='$topclassid'");

echo $topclassr['classname'];

?>

2. 简化版:直接通过SQL一次查询获取顶级栏目

如果栏目层级不深(如最多三级),可以通过一条SQL语句简化逻辑:

<?php

$classid = $GLOBALS['navclassid'];

while($classid != 0) {

$classr = $empire->fetch1("SELECT classid, bclassid, classname FROM {$dbtbpre}enewsclass WHERE classid='$classid'");

if($classr['bclassid'] == 0) {

echo $classr['classname']; // 输出顶级栏目名称

break;

}

$classid = $classr['bclassid'];

}

?>

3. 在自定义函数中封装(推荐)

将功能封装成函数更便于复用。打开e/functions/userfun.php文件,添加:

function getTopClassname($classid) {

global $empire, $dbtbpre;

while($classid != 0) {

$r = $empire->fetch1("SELECT bclassid, classname FROM {$dbtbpre}enewsclass WHERE classid='$classid'");

if($r['bclassid'] == 0) {

return $r['classname'];

}

$classid = $r['bclassid'];

}

return '';

}

然后在模板中调用:

<?php echo getTopClassname($GLOBALS['navclassid']); ?>