调用父栏目下子栏目的关键是通过bclassid字段查询指定父ID的子栏目,使用灵动标签[e:loop]从enewsclass表中提取classid、classname和classpath,按myorder排序,实现导航或分类列表展示。

在使用帝国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}]说明:
- 父栏目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}]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}]此方法适用于父栏目模板(如封面页、列表页),会自动识别当前栏目并调用其直接子栏目。
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}]这段代码会调用父栏目ID为3的子栏目,并只显示其中至少有一条信息的栏目,同时显示信息数量。
基本上就这些常用方式。根据实际需求选择静态ID调用或动态获取当前栏目ID的方式,灵活运用SQL语句即可实现各种子栏目展示效果。注意确保模板支持PHP语法,部分功能需开启“使用程序代码”选项。









