在帝国CMS中实现两套模板的切换功能,通常用于满足不同场景下的页面展示需求,例如移动端与PC端的适配、不同用户群体的差异化展示或特定活动页面的独立设计,以下是具体的实现方法和步骤:

理解帝国CMS模板机制
帝国CMS的模板系统通过“栏目模板”和“内容页模板”实现,每个栏目可独立绑定模板文件,内容页则根据栏目关联的模板生成,要实现两套模板切换,核心思路是创建不同的模板文件,并通过条件判断或用户选择来动态调用对应的模板。
实现两套模板切换的两种方案
通过栏目模板切换(适用于栏目级差异)
-
创建模板文件
在/e/template/
目录下创建两套模板文件,list_pc.htm
(PC端栏目列表页)list_mobile.htm
(移动端栏目列表页)页模板同理,创建show_pc.htm
和show_mobile.htm
。
-
栏目绑定模板
- 进入“栏目管理”→选择目标栏目→“修改栏目”→“列表模板”选项卡。
- 分别设置“列表内容模板”(如
list_pc.htm
)和“列表分页模板”(如list_page_pc.htm
)。 - 若需移动端适配,可创建新栏目并绑定移动端模板,或通过判断设备类型动态切换(需结合方案二)。
通过PHP判断动态调用模板(适用于全站级切换)
-
创建模板文件
同方案一,准备两套模板文件,并统一命名为list_default.htm
和show_default.htm
,通过PHP变量控制实际加载的模板。(图片来源网络,侵删) -
修改PHP文件实现动态调用
- 列表页切换:修改
/e/class/t_functions.php
文件,在listpage
函数中添加设备判断逻辑:function listpage($classid, $page = 1, $line = 20, $dot = 1, $tempid = 0, $tbname = '', $yh = 1, $sql = '') { global $empire, $dbtbpre, $public_r, $emod_r, $class_r; // 判断设备类型 $is_mobile = strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false; $tempfile = $is_mobile ? 'list_mobile.htm' : 'list_pc.htm'; // 调用模板 $tempid = $empire->gettotal("select temptid from {$dbtbpre}enewsclass where classid='$classid'"); $temp_r = $empire->fetch1("select * from {$dbtbpre}enewstemp where tempid='$tempid'"); $tempfile = $temp_r['temppath'].$tempfile; // 后续逻辑保持不变... }
- 内容页切换:修改
/e/class/show.php
文件,在开头添加设备判断:$is_mobile = strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false; $tempfile = $is_mobile ? 'show_mobile.htm' : 'show_pc.htm'; include($tempfile); // 替换原有的模板包含逻辑
- 列表页切换:修改
-
通过后台参数控制(可选)
若需手动控制模板切换,可在“系统参数”→“系统设置”中添加自定义变量(如use_mobile_template
),然后在PHP中通过该变量判断是否加载移动端模板。
注意事项
- 模板命名规范:确保两套模板文件名不冲突,建议通过后缀(如
_pc
、_mobile
)区分。 - 缓存清理:修改模板或PHP文件后,需在“后台→数据更新→更新首页”中清理模板缓存。
- CSS/JS路径适配:两套模板中的静态资源路径需相对独立,避免引用错误。
两套模板功能对比表
功能点 | 方案一(栏目绑定) | 方案二(PHP动态调用) |
---|---|---|
实现复杂度 | 低,仅需后台操作 | 中,需修改PHP文件 |
适用场景 | 单个栏目或少数栏目差异 | 全站或多数页面统一切换 |
灵活性 | 低,需逐个栏目设置 | 高,可通过条件扩展(如用户权限) |
维护成本 | 低,模板与栏目强关联 | 中,需同步维护PHP逻辑与模板文件 |
相关问答FAQs
Q1:如何确保移动端模板在手机端自动加载,PC端模板在电脑端显示?
A1:通过方案二的PHP判断逻辑,检测HTTP_USER_AGENT
中是否包含Mobile
关键字,若需更精准的设备识别,可集成第三方库(如Mobile Detect),替换简单的strpos
判断,确保平板设备等特殊场景的正确适配。
Q2:切换模板后,原有的分页、评论等功能是否需要单独适配?
A2:是的,两套模板需独立调用相同的功能标签(如[!--show.page--]
分页、[!--pl--]
评论),但可根据设备调整样式,例如移动端可简化分页按钮数量,评论表单字段减少,确保在不同模板下功能正常且体验一致。
