帝国 CMS 副字段怎么用
学完这篇,你能在帝国 CMS 里自己加一个「副表字段」,并且知道它在内容页、列表页分别该怎么调用、为什么有时候调不出来。
第一步:先弄明白副字段到底存在哪张表
帝国 CMS 一个内容模型对应两张表:主表 phome_ecms_news 和副表 phome_ecms_news_data_1。
- 主表放“轻”字段:标题、栏目、发布时间、审核状态这些列表页排序、查询要用的东西。
- 副表放“重”字段:正文
newstext、标题图、以及所有你选了“副表”的自定义字段。
查看位置:后台 → 系统 → 数据表与系统模型 → 管理数据表,找到「新闻系统数据表 (phome_ecms_news)」,点右侧「管理字段」,页面上会分主表字段、副表字段两块列出来。
分表的原因只有一个:列表页的 SQL 只查主表,字段越少越快;正文这种大文本放副表,只有打开内容页时才去查。
第二步:决定这个新字段放主表还是副表
判断标准很简单:
- 列表页要显示(价格、地区、来源、标签)→ 放主表。
- 只在内容页显示、体积又大(长篇附录、大段 HTML、地图代码)→ 放副表。
注意:副表字段不能在列表模板里用
[!--字段名--]直接调出来,写了也是空白。这是新手最常踩的坑,原因是列表页 SQL 默认不关联副表。
第三步:动手加一个副字段
后台 → 系统 → 数据表与系统模型 → 管理数据表 → 找到「新闻系统数据表 (phome_ecms_news)」→ 点「管理字段」→ 在页面里点「增加字段」,按下表填:
- 字段名:产品参数
- 字段标识:
canpin(英文,不能用数字开头) - 字段类型:
TEXT(短内容用VARCHAR,长度填 255) - 输入表单显示元素:多行文本框
- 存放表:选「副表」← 关键项
- 其他保持默认,点「提交」
提交后帝国 CMS 会自动执行 ALTER TABLE 改表结构,一般不用手动建表。
注意:字段标识保存后就别再改了。模板、SQL、数据库都靠它定位,改了旧数据会读不出来。
第四步:在内容页模板里调用
内容页模板(后台 → 模板 → 模板管理 → 内容模板,文件名通常是 publish.news.php 之类)里,直接写:
<div class="canshu">[!--canpin--]</div>
帝国 CMS 解析内容页时会自动关联副表,不需要你写任何 SQL。
第五步:在列表页/首页调副表字段
两种可行做法,选一个:
做法 A:把字段挪回主表。 数据量不大时最省事,直接在主表新建同名字段,把数据导过去。
做法 B:用灵动标签 + 子查询。 在列表模板或首页模板里写:
[e:loop={1,10,0,0}]
<?php
$fr=$empire->fetch1("select canpin from {$dbtbpre}ecms_news_data_1 where id='".$bqr[id]."'");
?>
<a href="<?=$bqsr[titleurl]?>"><?=$bqr[title]?></a> —— <?=$fr[canpin]?>
[/e:loop]
$dbtbpre 是表前缀变量,别写死 phome_。
注意:
ecms_news_data_1里的1是副表编号。如果你建过多个副表,可能是data_2,去「管理数据表」里确认实际表名。
第六步:验证是否生效
- 后台 → 内容 → 新闻 → 增加新闻,填上「产品参数」的内容,保存。
- 后台 → 生成 → 更新内容页(或数据更新中心 → 刷新内容页),重新生成静态页。
- 前台打开这条新闻,看字段有没有输出。
显示为空时按顺序排查:字段存放表是不是选成了主表 → 模板里字段标识拼写对不对 → 静态页有没有重新生成。
注意:帝国 CMS 默认生成静态页,加了字段、改了模板却不「更新内容页」,前台看到的永远是旧页面。
小结
- 副字段 = 存在
phome_ecms_xxx_data_1副表里的自定义字段,主表只放查询排序要用的轻字段。 - 加字段入口:系统 → 数据表与系统模型 → 管理数据表 → 管理字段 → 增加字段,「存放表」选副表。
- 字段标识用英文,定下来就别改。
- 内容页模板直接写
[!--字段标识--]就能调用。 - 列表页、首页要用副表字段,必须自己写 SQL 关联副表,不能直接写字段变量。
- 改完记得重新生成静态页,否则验证时容易误判。
原文链接:https://www.gj0.com/thread-112.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。