使用帝国CMS时,调用指定TAGS下的文章列表是一个常见的需求,尤其适用于做内容聚合、相关推荐或专题页面。虽然帝国CMS默认没有直接提供按TAG调用文章的功能,但可以通过SQL语句结合灵动标签来实现精准调用。

1. 获取指定TAG ID 或 TAG名称对应的文章

要调用某个TAG下的文章,首先需要知道该TAG的ID或名称。可以通过后台“数据更新”→“管理标签”中查看具体TAG的ID。

假设我们要调用TAG ID为5的文章列表,可以使用以下灵动标签代码:

[e:loop={"SELECT * FROM [!db.pre!]ecms_news WHERE id IN (SELECT id FROM [!db.pre!]enewstagsdata WHERE tagid=5) AND checked=1 ORDER BY newstime DESC LIMIT 10",10,24,0}]
<li><a href="" target="_blank"><?=$bqr['title']?></a></li>
[/e:loop]

说明:

[!db.pre!]ecms_news:根据你的数据表名调整,如是其他模型(如文章、下载),需替换为对应表名。

tagid=5:指定TAG的ID。

checked=1:确保只调用已审核的文章。

newstime DESC:按发布时间倒序排列。

LIMIT 10:限制显示10条。

2. 通过TAG名称调用文章列表

如果只知道TAG名称(如“SEO优化”),可以先通过SQL查询出对应的tagid,再进行调用。也可以合并为一条SQL语句:

[e:loop={"SELECT * FROM [!db.pre!]ecms_news WHERE id IN (SELECT td.id FROM [!db.pre!]enewstags t LEFT JOIN [!db.pre!]enewstagsdata td ON t.tagid = td.tagid WHERE t.tagname='SEO优化') AND checked=1 ORDER BY newstime DESC LIMIT 10",10,24,0}]
<li><a href="" target="_blank"><?=$bqr['title']?></a></li>
[/e:loop]

说明:

t.tagname='SEO优化':按标签名称匹配,注意编码问题,中文建议在程序中处理或确保数据库编码一致。

使用LEFT JOIN关联标签表和数据表,确保能正确获取对应文章ID。

3. 前端动态调用(支持参数传入)

如果你希望在不同页面复用,比如通过URL参数传递tagid,可以在PHP代码中动态生成SQL。

示例:在自定义页面或模板中加入PHP代码:

<?php

$tagid = (int)$_GET['tagid']; // 获取URL中的tagid

if($tagid){

$sql = "SELECT * FROM {$dbtbpre}ecms_news WHERE id IN (SELECT id FROM {$dbtbpre}enewstagsdata WHERE tagid=$tagid) AND checked=1 ORDER BY newstime DESC LIMIT 10";

$news = $empire->query($sql);

while($r = $empire->fetch($news)){

$titleurl = sys_ReturnBqTitleLink($r); // 获取标题链接

echo "<li><a href='$titleurl' target='_blank'>{$r['title']}</a></li>";

}

}

?>

访问时使用:yourpage.php?tagid=5 即可动态显示对应TAG的文章。