帝国CMS扩展变量新增多种字段类型修改方法|支持图片/文件/编辑器/多行文本
时间:2026-08-28 12:48:20 来源:aliz.cn 作者:SKY 阅读:
前言
帝国CMS自带【系统扩展变量】功能非常实用,可用于网站底部信息、联系方式、广告代码、全局配置。但是官方原生存在一个致命短板:所有扩展变量只能输入单行文本。无法实现:
1、无法上传LOGO、banner图片
2、无法放富文本介绍、多行版权信息
3、无法上传附件文件
4、无法使用编辑器排版
本篇教程通过新增数据库字段+修改后台模板+修改保存逻辑+自适应渲染表单,彻底解决该问题,让帝国CMS扩展变量支持 单行文本、多行文本、富文本编辑器、图片上传、文件上传 五种字段类型。
适配版本:帝国CMS7.5、帝国CMS8.0 全版本通用。
一、改造前准备(必做)
1、备份两个核心文件,防止改错无法恢复:/e/admin/template/AddPubVar.temp.php(变量添加/修改模板)/e/admin/pubvar.php(变量保存逻辑文件)2、备份数据库,防止字段新增出错。
3、操作前关闭网站缓存或后续清空全站缓存。
二、第一步:数据库新增字段 formtype
进入phpMyAdmin,执行以下SQL语句,给扩展变量数据表新增字段,用于存储当前变量的字段类型:ALTER TABLE `phome_enewspubvar` ADD `formtype` VARCHAR(20) NOT NULL DEFAULT 'text';参数说明:默认 text 单行文本,兼容旧变量,旧数据完全不受影响。
三、第二步:修改后台变量模板(增加字段类型选择)
打开文件:/e/admin/template/AddPubVar.temp.php找到【变量排序】的tr标签,在下方插入【表单类型选择下拉框】代码:
<tr> <td height="25">表单类型(*)</td> <td> <select name="formtype"> <option value="text" <?php if($r['formtype']=='text') echo 'selected';?>>单行文本框(text)</option> <option value="textarea" <?php if($r['formtype']=='textarea') echo 'selected';?>>多行文本框(textarea)</option> <option value="editor" <?php if($r['formtype']=='editor') echo 'selected';?>>富文本编辑器(editor)</option> <option value="img" <?php if($r['formtype']=='img') echo 'selected';?>>图片上传(img)</option> <option value="file" <?php if($r['formtype']=='file') echo 'selected';?>>文件上传(file)</option> </select> </td> </tr>作用:新增/编辑扩展变量时,可自由选择字段类型,自带选中状态。
四、第三步:替换变量值输入区域(自适应五种表单)
继续在AddPubVar.temp.php 找到原【变量值】输入框,删除原有 input 代码,替换为以下自适应渲染代码:
<?php if($r['formtype']=='text'){ ?> <input type="text" name="varvalue" value="<?=$r['varvalue']?>" size="60"> <?php }elseif($r['formtype']=='textarea'){ ?> <textarea name="varvalue" cols="70" rows="8"><?=$r['varvalue']?></textarea> <?php }elseif($r['formtype']=='editor'){ ?> <?=ecms_Editor("varvalue",$r['varvalue'],700,350)?> <?php }elseif($r['formtype']=='img'){ ?> <input name="varvalue" type="text" id="varvalue" value="<?=$r['varvalue']?>" size="52"> <input type="button" value="上传图片" onclick="OpenUpImg('varvalue')"> <?php }elseif($r['formtype']=='file'){ ?> <input name="varvalue" type="text" id="varvalue" value="<?=$r['varvalue']?>" size="52"> <input type="button" value="上传文件" onclick="OpenUpFile('varvalue')"> <?php } ?>功能说明:
1、text:普通单行文本,适配联系方式、关键词
2、textarea:多行文本,适配简介、备注、版权
3、editor:完整富文本编辑器,支持图文混排
4、img:后台弹窗上传图片,自动返回图片地址
5、file:后台弹窗上传附件,返回文件下载地址
五、第四步:修改保存逻辑,写入字段类型
打开文件:/e/admin/pubvar.php
1、接收表单参数
搜索:$varvalue=$_POST['varvalue'];在上方添加:
$formtype=$_POST['formtype'];
2、修改新增变量SQL语句
找到新增SQL:$empire->query("Insert into {$dbtbpre}enewspubvar(varname,varvalue,myorder,varclassid,vartitle,varinfo,docache) values('$varname','$varvalue','$myorder','$varclassid','$vartitle','$varinfo','$docache')");替换为:
$empire->query("Insert into {$dbtbpre}enewspubvar(varname,varvalue,myorder,varclassid,vartitle,varinfo,docache,formtype) values('$varname','$varvalue','$myorder','$varclassid','$vartitle','$varinfo','$docache','$formtype')");
3、修改编辑变量SQL语句
找到编辑更新SQL,同步增加formtype更新,保证修改类型可保存:$empire->query("update {$dbtbpre}enewspubvar set varvalue='$varvalue',myorder='$myorder',vartitle='$vartitle',varinfo='$varinfo',formtype='$formtype',docache='$docache' where varid='$varid'");至此,所有源码修改完成。
六、前台模板调用方法(通用)
1、开启缓存调用(推荐,速度快)
<?=$public_r['add_变量名']?>
2、不缓存实时调用(适合经常改动的内容)
<?=ReturnPubVar('变量名')?>
3、不同类型调用示例
图片变量:<img src="<?=$public_r['add_logo']?>" alt="LOGO">文件变量:
<a href="<?=$public_r['add_file']?>">下载文件</a>编辑器富文本:直接输出即可,自动解析HTML
七、清理缓存、生效步骤
1、后台 → 数据更新中心 → 清空全站缓存2、更新栏目缓存、模板缓存
3、新增测试变量,分别测试五种类型是否正常保存、渲染
八、常见问题排查
1、没有字段类型下拉框
模板文件未覆盖成功、缓存未清空,清空后台缓存+浏览器缓存。2、选择类型保存不生效
未执行数据库新增字段SQL,或 pubvar.php 未修改成功。3、图片/文件上传按钮无反应
后台缺少上传JS函数,帝国CMS原版自带OpenUpImg、OpenUpFile,原版环境不会失效。4、编辑器空白不显示
缓存未清、页面JS冲突,更新系统缓存即可。5、旧扩展变量消失/错乱
不会出现,默认formtype为text,完美兼容所有旧数据。九、进阶拓展(可选)
如需进一步增强,可继续扩展:下拉选择、单选、多选、日期选择、颜色选择字段类型,只需新增case判断、增加前端表单即可,结构完全通用。结语
通过本次改造,彻底解决了帝国CMS扩展变量功能单一的问题。后台可以自由创建:文本、多行、富文本、图片、文件五种全局变量,极大提升模板灵活性,适合做全站统一LOGO、底部版权、广告位、公告、下载文件等全局配置,是帝国CMS建站必改实用优化方案。本文为aliz.cn原创教程,可直接转载发布
本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载
发表评论
共有0条评论