这篇教程适合刚装好帝国CMS、能进后台、会改模板,但对“帝国CMS字段调用”还没跑通的新手,你不需要精通PHP,照着步骤复制代码即可,目标很明确:给文章模型加一个自定义字段,课程价格”,然后在后台能录入,在内容页、列表页、首页都能正确显示。
动手前先确认三件事
第一,备份数据库和模板文件,改字段、改模板之前备份,是老建站人的底线。
第二,确认表前缀,默认是 phome_,但你可能安装时改过,打开 /e/config/config.php,找 $dbtbpre,它是什么,后面SQL里就用什么。
第三,确认附加表名,后台进入:系统 → 数据表与系统模型 → 管理数据表,找到新闻系统数据表,通常会看到主表 phome_ecms_news,附加表 phome_ecms_news_data_1,自定义字段多数存在附加表里,这一步记下来。
完整搭建步骤
第1步:新增自定义字段
后台进入:系统 → 数据表与系统模型 → 管理数据表 → 新闻系统数据表 → 字段管理 → 增加字段。
填写:

帝国CMS字段调用实战,自定义字段从后台到列表页、内容页一次调通
- 字段名:
price - 字段标识:
课程价格 - 字段类型:单行文本框
- 输入表单替换html:
<input name="price" type="text" id="price" value="<?=$r['price']?>" size="30">
其他选项默认,保存,字段名必须用小写英文,不要用中文、空格、横杠,也不要和
title、newstime、id、classid这类系统字段重名。
第2步:设置列表页调用字段
回到“管理数据表”,找到新闻系统数据表,点“修改表”,不同版本叫法略有差异,找到“列表页调用字段”或“列表模板调用字段”,填入:
price
保存,这一步非常关键,因为自定义字段在附加表,列表模板默认不一定查询附加表字段,配置后,列表模板里才能用 $r['price'] 调用,如果没有这个设置项,就用后面的灵动标签SQL联表方案。
第3步:更新缓存
后台进入:系统 → 数据更新中心 → 更新缓存,改字段、改模板后,不更新缓存,前台可能还是旧数据。
第4步:录入测试数据
后台进入:信息 → 新闻 → 增加信息,标题写“测试课程”,课程价格填 1999,发布,然后打开前台内容页,准备验证。
第5步:内容页调用字段
后台进入:模板 → 模板管理 → 新闻系统模板 → 内容模板,在需要显示价格的位置加入:
价格:<?=$navinfor['price']?>
如果服务器不支持短标签,就用:
价格:<?php echo $navinfor['price'];?>
保存模板,更新缓存,刷新内容页,内容页里,自定义字段通常用 $navinfor 数组调用。
第6步:列表页调用字段
进入:模板 → 模板管理 → 新闻系统模板 → 列表模板,在列表循环里加入:
价格:<?=$r['price']?>
如果列表页不显示,说明附加表字段没有被列表SQL带出来,先检查第2步“列表页调用字段”是否填了 price,如果还是不行,用灵动标签SQL联表:
[e:loop={"select a.*,b.price from phome_ecms_news a left join phome_ecms_news_data_1 b on a.id=b.id where a.classid=1 order by a.newstime desc limit 10",10,24,0}]
<a href="<?=$bqr['titleurl']?>"><?=$bqr['title']?></a>
<span>价格:<?=$bqr['price']?></span>
[/e:loop]
把 phome_ 换成你的真实表前缀,把 classid=1 换成目标栏目ID,灵动标签里用 $bqr,不是 $r,如果列表页需要分页,优先用第2步配置列表字段,不要直接用灵动标签替代分页。
第7步:首页或自定义页面调用
首页、专题页、自定义页面,适合用灵动标签SQL调用最新几条:
[e:loop={"select a.*,b.price from phome_ecms_news a left join phome_ecms_news_data_1 b on a.id=b.id where a.classid=1 order by a.newstime desc limit 5",5,24,0}]
<a href="<?=$bqr['titleurl']?>"><?=$bqr['title']?></a> 价格:<?=$bqr['price']?>
[/e:loop]
首页没有当前栏目变量,建议直接写具体栏目ID,列表页要动态栏目ID时,可在模板里用 $GLOBALS['navclassid'],但新手先写死栏目ID更容易成功。
第8步:多值字段和图片字段
如果是复选框、多选字段,值可能存成 红色|蓝色|黑色,调用如下:
<?php
$arr = explode('|', $navinfor['color']);
foreach($arr as $v){
echo $v.' ';
}
?>
图片字段:
<img src="<?=$navinfor['pic']?>" alt="<?=$navinfor['title']?>">
配置要点
- 字段名和调用名必须一致,推荐全小写。 页用
$navinfor,列表页用$r,灵动标签用$bqr,不要混。 - 附加表字段要在列表页显示,必须配置“列表页调用字段”或用SQL联表。
- SQL联表必须写
on a.id=b.id,否则数据会串。 - 表前缀和附加表名以你后台实际为准,不要照抄
phome_。 - 改字段、改模板后,更新缓存并强制刷新浏览器。
- 输出用户填写内容时,建议用
htmlspecialchars转义,避免样式错乱。
常见踩坑提醒
字段名写 price,调用写 Price,结果空白。
列表页直接写 $r['price'] 为空,九成是字段在附加表,没配置列表页调用字段。
SQL里表前缀写错,或者附加表写成 _data_2,数据查不出来。
把“字段标识”当成调用名,模板调用用的是“字段名”,不是后台显示的中文标识。 页用 $bqr,列表页用 $navinfor,变量用错,自然不显示。
字段加完后旧文章没有默认值,需要重新编辑或手动SQL补值。
模板改了不更新缓存,前台一直不变。
多选字段直接输出会带 ,要用 explode 拆分。
按这个顺序走:建字段 → 配列表字段 → 录数据 → 内容页调用 → 列表页调用 → 首页调用 → 多值处理 → 更新缓存,新手也能把帝国CMS字段调用一次跑通。
发表评论