HOME> 战力提升> 帝国cms怎么调用父栏目下的所有子栏目_帝国cms子栏目调用方法与代码示例

帝国cms怎么调用父栏目下的所有子栏目_帝国cms子栏目调用方法与代码示例

战力提升 2026-01-21 15:00:24
使用帝国CMS进行网站开发时,经常会遇到需要调用某个父栏目下所有子栏目的情况,比如做导航菜单、分类列表等。实现这个功能的关键在于正...

使用帝国CMS进行网站开发时,经常会遇到需要调用某个父栏目下所有子栏目的情况,比如做导航菜单、分类列表等。实现这个功能的关键在于正确使用灵动标签([e:loop])并结合栏目数据表的父子关系字段(bclassid)。

1. 帝国CMS调用父栏目下子栏目的基本逻辑

帝国CMS中每个栏目都有一个 bclassid 字段,表示该栏目的父栏目ID。如果要调用某个父栏目下的所有子栏目,只需要查询 class 数据表中 bclassid = 父栏目ID 的记录即可。

常用场景:当前为父栏目页面,需列出其所有子栏目;或在首页、内容页指定某个父栏目ID来展示子栏目列表。

2. 调用指定父栏目下的所有子栏目(代码示例)

[e:loop={"select classid, classname, classpath from [!db.pre!]enewsclass where bclassid=父栏目ID order by myorder",0,24,0}]

=$bqr[classname]?>

[/e:loop]

说明:

父栏目ID:替换为你实际要调用的父栏目ID,例如 5

[!db.pre!]enewsclass:是帝国CMS默认的数据表名,带表前缀

order by myorder:按后台排序顺序排列

$bqr[classpath] 和 $bqr[classname]:分别输出栏目路径和名称

示例(调用ID为3的父栏目的所有子栏目):

[e:loop={"select classid, classname, classpath from [!db.pre!]enewsclass where bclassid=3 order by myorder",0,24,0}]

=$bqr[classname]?>

[/e:loop]

3. 在当前父栏目页面自动调用其子栏目(自适应父ID)

如果你希望在任意父栏目页面中自动调用其下属子栏目,可以使用变量 $GLOBALS['navclassid'] 获取当前栏目ID。

[e:loop={"select classid, classname, classpath from [!db.pre!]enewsclass where bclassid='$GLOBALS[navclassid]' order by myorder",0,24,0}]

=$bqr[classname]?>

[/e:loop]

此方法适用于父栏目模板(如封面页、列表页),会自动识别当前栏目并调用其直接子栏目。

4. 高级用法:调用子栏目并判断是否有信息

有时你只想显示有发布内容的子栏目,可以通过关联信息数量来过滤。

[e:loop={"select c.classid, c.classname, c.classpath, count(s.id) as total from [!db.pre!]enewsclass c left join [!db.pre!]ecms_news s on c.classid=s.classid where c.bclassid=3 group by c.classid having total > 0 order by c.myorder",0,24,0}]

=$bqr[classname]?>(=$bqr[total]?>)

[/e:loop]

这段代码会调用父栏目ID为3的子栏目,并只显示其中至少有一条信息的栏目,同时显示信息数量。

基本上就这些常用方式。根据实际需求选择静态ID调用或动态获取当前栏目ID的方式,灵活运用SQL语句即可实现各种子栏目展示效果。注意确保模板支持PHP语法,部分功能需开启“使用程序代码”选项。