基础概念:什么是标签?
在帝国CMS中, 就是一段特殊的代码,它被 <?php ... ?> 包围,用于从数据库中获取数据并动态地显示在页面上,你可以把它想象成一个“命令”,告诉CMS“请从这里获取一些信息,然后显示在这里”。

基本语法格式:
<?php
// 这里是标签的具体代码
?>
最常用标签:信息列表标签 (empirenews)
这是最核心、最常用的标签,用于显示文章(新闻、产品等)的列表,它通常用于首页、列表页、栏目页等。
最简单的列表标签
这个标签会从默认的信息表中(通常是 phome_ecms_news 表)按发布时间倒序,取出10条记录。
<?php
$empire = getdb();
$news=$empire->query("select * from {$dbtbpre}ecms_news order by newstime desc limit 10");
while($r=$empire->fetch($news)){
// 循环输出每条记录
}
?>
模板中如何书写:

<ul>
<?php
$empire = getdb();
$news=$empire->query("select * from {$dbtbpre}ecms_news order by newstime desc limit 10");
while($r=$empire->fetch($news)){
?>
<li>
<a href="[!--news.url--]" target="_blank">[!--title--]</a>
<span>[!--newstime--]</span>
</li>
<?php
}
?>
</ul>
说明:
<?php ... ?>:标签的开始和结束。$empire = getdb();:连接数据库的固定写法,必须有。$empire->query(...):执行SQL查询。{$dbtbpre}:帝国CMS的数据表前缀,如果你的前缀是phome_,它就会被替换成phome_,这样即使你修改了前缀,代码也能正常工作。ecms_news:新闻信息表名,如果你的信息模型是“新闻”,通常就是这个名字,如果是产品,可能是ecms_product。order by newstime desc:按发布时间倒序排列。limit 10:只取10条记录。while($r=$empire->fetch($news)):循环遍历查询结果。[!--title--]、[!--newstime--]、[!--news.url--]:这是字段变量。$r数组里包含了当前记录的所有字段信息,[!--字段名--]就是它们的简写。[!--title--][!--smalltext--]:文章简介[!--newstime--]:发布时间[!--classid--]:栏目ID[!--id--]:信息ID[!--news.url--]:文章链接(news是信息表名,如果是产品就是[!--product.url--])
标签的简化写法:listshow 函数
为了方便开发者,帝国CMS提供了一个非常强大的内置函数 listshow(),它封装了上述复杂的查询逻辑,让代码更简洁。
语法:
listshow('栏目ID', '显示条数', '标题截取长度', '是否显示简介', '附加SQL条件', '模板ID')
示例:显示“网站首页”栏目下的5条最新文章

假设“网站首页”栏目的ID是 1。
<ul>
<?php
listshow(1, 5, 30, 1); // 参数依次是:栏目ID, 显示条数, 标题长度, 是否显示简介(1为显示)
?>
</ul>
模板中如何书写(配合 list.var 模板):
listshow 函数需要一个配套的模板文件来定义每条信息的显示样式,这个模板文件在 “模板” -> “列表内容模板” 中管理,通常选择一个 list.var 模板。
list.var 模板内容示例:
<li>
<a href="[!--titleurl--]" target="_blank">[!--title--]</a>
<span>[!--newstime--]</span>
</li>
[!--titleurl--]:这是[!--news.url--]的别名,功能完全一样,都是获取文章链接。
使用步骤:
- 在后台进入“模板” -> “列表内容模板”。
- 选择一个
list.var模板,将上面的代码复制进去并保存。 - 在你的页面模板中,使用
listshow()函数调用它。
listshow() 的优点:
- 代码简洁:一行代码搞定列表调用。
- 自动关联栏目:可以根据栏目ID自动调用该栏目下的信息,并自动处理栏目链接。
- 灵活配置:可以方便地控制条数、标题长度等。
其他常用标签
当前栏目信息标签 (GetClassUrl)
用于获取当前栏目的信息,如栏目名称、栏目链接等。
当前位置:<a href="[!--news.url--]">首页</a> > <a href="[!--classurl--]">[!--classname--]</a>
[!--classurl--]:当前栏目的链接。[!--classname--]:当前栏目的名称。
首页幻灯片/推荐位标签 (empirecms)
这个标签用于调用后台设置的“首页推荐位”或“首页幻灯片”内容。
<?php
$slide=$empire->query("select * from {$dbtbpre}enewspl where classid=1 order by myorder limit 5");
while($r=$slide->fetch()){
// 循环输出
}
?>
enewspl:推荐位数据表。classid=1:推荐位的ID,你可以在后台“推荐位管理”中查看。myorder:推荐位的排序字段。
模板中如何书写:
<div class="slider">
<?php
$slide=$empire->query("select * from {$dbtbpre}enewspl where classid=1 order by myorder limit 5");
while($r=$slide->fetch()){
?>
<a href="[!--titleurl--]" target="_blank">
<img src="[!--titlepic--]" alt="[!--title--]">
</a>
<?php
}
?>
</div>
[!--titlepic--]:推荐位设置的图片。
高级技巧与注意事项
自定义SQL查询
当 listshow 无法满足复杂需求时(需要跨表查询、按特定字段排序等),就需要手写SQL。
示例:调用“产品”栏目(ID=5)下“价格”大于1000的产品。
<?php
$empire = getdb();
// phome_ecms_product 是产品信息表,price 是一个自定义字段
$sql = "select * from {$dbtbpre}ecms_product where classid=5 and price > 1000 order by price desc limit 10";
$products = $empire->query($sql);
while($r = $empire->fetch($products)){
?>
<div class="product-item">
<h3><a href="[!--titleurl--]">[!--title--]</a></h3>
<p>价格:¥[!--price--]</p> <!-- price 是你添加的自定义字段 -->
</div>
<?php
}
?>
缓存的使用
对于首页、列表页等访问量大但更新不频繁的页面,开启缓存可以极大提升网站速度。
- 后台设置:在 “系统” -> “数据更新” -> “更新首页” 等选项中,可以勾选“使用首页缓存”。
- 模板中控制:在
<?php ... ?>标签内,可以使用GetHtml()函数来获取缓存内容。
调试技巧
如果标签不显示内容或报错,可以:
- 检查表名:确认
ecms_news或ecms_product是否是你模型对应的正确表名。 - 检查字段名:确认
[!--title--]等字段变量是否在表中真实存在。 - 检查权限:确认数据库用户是否有查询该表的权限。
- 简化代码:先写一个最简单的
listshow()或select *语句,确保能出数据,再逐步增加条件。 - 查看错误日志:如果页面空白,可能是PHP代码有致命错误,查看服务器的PHP错误日志。
| 需求场景 | 推荐标签/方法 | 说明 |
|---|---|---|
| 调用栏目下的文章列表 | listshow(栏目ID, 条数...) |
最常用、最推荐,代码简洁,功能强大。 |
| 自定义复杂查询 | <?php $empire->query("..."); ?> |
灵活度高,适合需要特殊SQL逻辑的场景。 |
| 获取当前栏目信息 | [!--classname--], [!--classurl--] |
用于面包屑导航等。 |
| 调用幻灯片/推荐位 | <?php $empire->query("select * from enewspl..."); ?> |
用于首页广告、焦点图等。 |
| 获取单篇文章详情 | 页模板直接使用 [!--title--] 等 |
内容页模板(show.php)有特殊的变量环境。 |
从 listshow() 开始学习,是掌握帝国CMS模板标签最快的方式,当你熟悉了基本用法后,再尝试手写SQL,就能应对各种复杂的需求了。
