帝国 CMS 单选多选字段调用

chinaz
chinaz 正式会员超兽战士
发布于 2026-10-07 08:51 ·1 浏览 ·0 回复

学完这篇,你能在帝国 CMS 的模板里正确输出单选框、复选框字段的显示值,不会再出现「1,3」「0」这种看不懂的内容。

第一步:先确认字段存的是什么

这一步要做的是查清你的字段类型和入库格式,查完你才知道模板里该写什么代码。

进入后台,路径是:系统 → 数据表与系统模型 → 管理数据表,找到你的模型对应的数据表(比如 phome_ecms_news),点右侧「管理字段」,找到你的字段名(例如 sex、hobby)。

点「修改」看两处:

  • 字段类型:单选框(RADIO)、复选框(CHECKBOX)、多选框(MULTISELECT)、下拉框(SELECT)。单选和多选的区别就在这里。
  • 字段值:每行一个「显示名|存储值」,例如
男|1
女|0

意思是后台显示「男」,数据库里实际存 1。

然后是关键:数据库里存的永远是竖线后面的存储值,不是显示名。单选存 1,多选存 1,3 这种逗号分隔的串。

注意:个别版本的复选框字段入库时首尾会多带分隔符(例如 ,1,3,),所以写代码前先到后台 → 数据表管理 → 浏览数据表里看两眼真实值,比猜靠谱。

第二步:在内容模板里输出单选字段

这一步做完,内容页上就能显示「男」而不是「1」。

进入 模板 → 内容模板 → 修改 你正在用的模板。有两种写法:

写法一,直接输出原始值:

[!--sex--]

结果就是 1。适合你只想拿值做判断的场景。

写法二,输出中文名,用 PHP 判断:

<?php echo $navinfor['sex']==1 ? '男' : '女'; ?>

注意:内容模板里自定义字段变量是 $navinfor['字段名'],不是 $navinfor[字段名],方括号里的字段名必须加单引号。

第三步:在内容模板里输出多选字段

这一步做完,多个选项会逐个显示出来。

复选框字段的值是逗号分隔串,必须先用 explode 拆开:

<?php
$map = array('1'=>'篮球','2'=>'足球','3'=>'羽毛球');
$hobby = array_filter(explode(',', $navinfor['hobby']));
foreach($hobby as $v){
    if(isset($map[$v])) echo '<span class="tag">'.$map[$v].'</span>';
}
?>

array_filter 是为了滤掉空元素,避免没选任何项时输出一片空白标签。

如果模板里不想写太长的 PHP,也可以直接输出存储值,用逗号隔开:

<?php echo str_replace(',', '、', $navinfor['hobby']); ?>

缺点是不会转换成中文名,适合存储值本身就是中文的情况。

第四步:列表页和灵动标签里怎么调

这一步做完,列表页、首页的循环里也能输出这些字段。

两个变量名不一样,别搞混:

  • 列表模板 / 列表内容模板(list.var) 用 $r[字段名]:
<?php $h = array_filter(explode(',', $r['hobby'])); ?>
<li><?=$r[title]?>:<?=implode('、', $h)?></li>
  • 灵动标签 [e:loop] 用 $bqr[字段名]:
[e:loop={1,10,0,0}]
<?php $h = array_filter(explode(',', $bqr['hobby'])); ?>
<li><?=$bqr[title]?>:<?=implode('、', $h)?></li>
[/e:loop}]

注意:灵动标签里写 PHP 必须包在 <?php ?> 里,而且中间不能有换行把标签的属性撑断;$bqr 只在 [e:loop] 和 [/e:loop] 之间有效。

第五步:改完一定要刷新缓存

这一步做完,改动才会真正生效。

路径:系统 → 数据更新中心 → 刷新所有缓存,再点「更新内容页」和「更新列表页」。帝国 CMS 的模板是编译成缓存文件的,只改模板不刷新,前台看到的还是旧内容。

注意:字段名不要用中文或保留字(如 type、id),否则模板里取不到值。另外字段改过名之后,旧模板里的调用要同步替换,否则会输出空白。

小结

  • 单选/多选字段存的是「存储值」,不是「显示名」,模板里要么判断、要么建映射数组。
  • 内容模板用 $navinfor['字段名'],列表模板用 $r['字段名'],灵动标签用 $bqr['字段名']。
  • 复选框值先用 explode(',', ...) 拆成数组,再 foreach 输出。
  • 空值先过滤(array_filter 或 empty 判断),避免输出空标签。
  • 改完模板必须刷新缓存并更新内容页、列表页。
版权声明:本文来自 GJ站长论坛《帝国 CMS 单选多选字段调用》
原文链接:https://www.gj0.com/thread-195.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~