使用帝国CMS时,调用指定ID栏目下的所有文章是一个常见的需求,比如用于首页展示、专题页整合或内容聚合页面。实现这一功能主要通过灵动标签([e:loop])结合栏目ID进行数据调用。

使用灵动标签调用指定栏目ID的文章

帝国CMS提供了强大的灵动标签功能,可以在模板中灵活调用数据库内容。要调用某个栏目ID下的所有文章,只需设置正确的SQL查询条件。

基本语法示例:

[e:loop={"select * from [!db.pre!]ecms_news where classid=栏目ID order by newstime desc",10,24,0}]

=$bqr['title']?>

[/e:loop]

说明:

classid=栏目ID:将“栏目ID”替换为实际的栏目编号,例如 classid=5

ecms_news:根据你的数据表调整,如使用的是下载模型则为 ecms_download

10:显示条数,表示最多显示10条记录

24:操作类型,24表示使用标题+链接模式,一般保持默认即可

0:是否仅推荐,0为不限制

$bqsr['titleurl'] 和 $bqr['title'] 分别对应文章链接和标题

调用多级子栏目的文章(含子栏目)

如果目标栏目有子栏目,并希望一并调用其下所有文章,可以使用系统内置函数或扩展SQL条件。

方法一:使用 in 条件包含多个栏目ID

[e:loop={"select * from [!db.pre!]ecms_news where classid in (5,6,7) order by newstime desc",10,24,0}]

=$bqr['title']?>

[/e:loop]

适用于已知多个栏目ID的情况。

方法二:自动获取当前栏目及子栏目文章

若想动态调用某栏目及其所有子栏目内容,可在PHP代码中先获取子栏目列表,再拼接SQL。但需开启模板支持PHP:

php $fid = 5; // 指定父栏目ID $class_r_arr = explode(',', $class_r[$fid]['sonclass']); $class_r_arr[] = $fid; // 包含自身 $classids = implode(',', $class_r_arr); ?> [e:loop={"select * from [!db.pre!]ecms_news where classid in ($classids) order by newstime desc",10,24,0}]

=$bqr['title']?>

[/e:loop]

通过SQL直接关联栏目表更灵活调用

若需要同时显示栏目名称、文章标题等信息,可通过JOIN方式联合查询。

[e:loop={"select a.*, c.classname from [!db.pre!]ecms_news a left join [!db.pre!]enewsclass c on a.classid=c.classid where a.classid=5 order by a.newstime desc",8,24,0}]

[=$bqr['classname']?>] =$bqr['title']?>

[/e:loop]

此方法可同时输出所属栏目名,适合做分类展示。