适用人群
这篇教程写给谁?第一,正在用帝国CMS建站但被模板标签搞到头秃的新手;第二,想要在列表页、内容页调用自定义字段却不知道怎么写代码的运营;第三,被“字段调用不生效”折磨得想砸电脑的半个技术,只要你会后台基本操作、能看懂HTML标签,剩下的事情跟着我一步步做,保证你能把字段调用玩得明明白白。

帝国CMS字段调用从入门到精通,手把手搭建自定义字段调用系统
完整搭建步骤:从建字段到页面输出
第一步:在后台新建自定义字段
登录帝国CMS后台,进入“系统设置” → “数据表管理”,找到你正在用的内容模型(比如文章模型“news”),点击“管理字段”,然后选择“新建字段”,这里要填三个关键东西:
- 字段名:用英文小写,
mprice(市场价格)或author_intro(作者简介),别用中文,也别带空格。 - 字段标识:这个会显示在后台录入页面上,可以写中文,市场价”“作者简介”。
- 字段类型选,纯文字用“单行文本”,长一点的文章用“多行文本/编辑器”,图片用“图片上传”,下拉选项用“单选/多选”。
建好字段后,记得回到“数据表管理”页面,点击“更新缓存”,不刷新缓存,后面调用全是空的。
第二步:给模板添加字段调用标签
帝国CMS的字段调用核心就是 [!--字段名--] 这种标签,拿内容页模板(通常叫 news/view.html)举例,你想显示刚建的“市场价”字段,就在模板里写:
<p class="price">市场价:<span class="red">[!--mprice--]</span></p>
如果是列表页模板(news/list.html),列表循环里面用同样的标签:
<li><a href="[!--titleurl--]">[!--title--]</a> 价格:[!--mprice--]</li>
这里有个非常重要的区别:内容页和列表页的标签形式可能不一样,列表页如果用的是“灵动标签”或者“SQL调用”,写法就变了,后面我会单独说。
第三步:处理图片字段和附件字段
如果字段类型是“图片上传”,那么后台存的是附件ID,直接输出 [!--picfield--] 会显示一串数字,这时候要用帝国CMS的“取附件地址”语法:
<img src="[!--picfield--]" alt="[!--title--]" />
不对,这样还是不行,正确做法是配合系统函数:
<img src="<?=sys_ReturnTruePath($navinfor['picfield'])?>" />
这个 $navinfor 是在内容页模板里可用的全局数组,里面的键就是你的字段名,在列表页,如果你用了 ecmsphp 标签,也可以把 $r['picfield'] 传给这个函数处理。
第四步:用灵动标签做跨表或复杂调用
当你不想改模板自带的循环,或者要调用其他数据表的字段时,灵动标签就是救星,比如要在首页调取最新5篇文章的“作者简介”,写:
[e:loop={"select * from phome_ecms_news where checked=1 order by newstime desc limit 5",5,24,0}]
<h3><?=$bqr['title']?></h3>
<p><?=substring($bqr['author_intro'],0,50)?></p>
[/e:loop]
注意这里的 phome_ 是表前缀,你的可能是 www_,反正去数据库里看。$bqr 就是当前记录数组,字段名直接当键用。
第五步:在搜索或筛选页调用自定义字段
如果你的自定义字段需要参与搜索,在搜索结果的列表模板中,字段照样用 [!--字段名--],但前提是你在后台“搜索配置”里勾选了该字段可搜索,否则搜出来是空的,别怪我没提醒。
配置要点(必须逐字看)
-
缓存更新时机:每当你改完字段、模板、标签,都必须去“系统设置” → “数据更新”里刷新对应的缓存,尤其是字段列表缓存和模板缓存,不然你刷新一万次页面也是旧样子。
-
字段名大小写:帝国CMS字段名是区分大小写的,后台字段名存的是小写,你模板里写
[!--Price--]就调不出来,写成[!--price--]才行。 -
列表页与内容页模板的标签差异页直接
[!--字段--],列表页在for循环里也是[!--字段--],但是在灵动标签里必须用$bqr['字段'],在模板SQL里用$r['字段'],搞混了你就会看到白屏。 -
字段值二次处理:数字字段输出时默认是原样数字,如果你要格式化价格(比如加千分位),得用帝国CMS的
format_money函数,别直接裸输出。 -
重复字段调用:一个字段在模板里可以出现多次,比如标题在标题标签里用一次,在面包屑里又用一次,没问题,系统不会报错。
常见踩坑提醒(每一条都是血泪)
坑一:字段值显示为0或空。 多半是你建字段的时候忘了在“数据表管理”里“更新表缓存”,或者你的模板是静态页面,需要重新生成HTML,帝国CMS是静态页系统,你改模板后必须去“批量更新”里重新生成所有相关页面,光刷新浏览器没用。
坑二:图片字段输出成数字。 前面提到的,图片上传字段存的是ID,不是路径,如果你直接输出了数字,说明你用了 [!--图片字段--] 而没走函数,解决方法是去模板里改成 sys_ReturnTruePath 包装一下,或者建字段的时候用“图片地址”类型而不是“图片上传”类型(后者存路径,直接输出就能用)。
坑三:列表页调用了详情页的字段值乱码。 有些字段在列表页本来就没必要加载,但如果你在列表SQL里 select *,帝国CMS默认可能不加载自定义字段,导致 $bqr['我的字段'] 是空的,解决:在SQL里明确写上字段名,select title, author_intro from ...。
坑四:后台录入界面不显示新增字段。 建了字段后,去“数据表管理” → “字段管理”确认字段是启用状态,然后检查“内容模板”里有没有把它放进去,后台录入模板和前台显示模板是两回事,后台不显示你就没法录入数据。
坑五:调用字段时出现PHP警告。 Undefined index: mprice,这是因为你调的字段在当前记录里不存在,常见于你改错数据表,或者字段名拼写有空格,去数据库表里用 desc 表名 看看真实字段名,别靠记忆。
坑六:灵动标签里不能直接套 [!--字段--]。 这是新手最常犯的错,在 [e:loop] 里面,你要用 <?=$bqr['字段']?> 这种PHP写法,不能在PHP标签里再用帝国CMS模板标签,会被当成字符串输出。
坑七:改完字段后所有文章内容都没了。 如果你往已有文章的数据表里添加字段,并且勾选了“必须填写”,那么旧数据因为没填这个字段,可能在前台查不出来,解决:在后台“系统设置” → “数据表管理” → “执行SQL”里,给旧数据批量赋个默认值,update phome_ecms_news set mprice='0' where mprice=''。
最后给你一套万能调试方法
如果你按上面步骤做了还是调不出来,别急,按这个顺序排查:
- 后台 → 系统设置 → 数据表管理 → 管理字段,确认你的字段名完全正确。
- 找一张有数据的记录,后台编辑这条内容,看自定义字段的值有没有保存进去。
- 打开前台页面源代码,看标签输出位置是不是空的,还是输出了“Array”或数字。
- 临时在模板里写
<?php print_r($navinfor);?>页)或<?php print_r($bqr);?>(灵动标签),看打印数组里有没有你的字段,这是终极大法,能看到一切真实数据。
帝国CMS字段调用没有玄学,所有问题都是“名字不对、缓存没刷、页面没生成、选错了数据表、用了错误的标签语法”这五种原因造成的,你按照上面的流程操作,再结合调试方法,没有调不出来的字段,如果还有问题,把错误截图和那段模板代码一起发给AI,把字段名指出来,让它帮你逐字检查,一次就能解决。
发表评论