## **1. 模板多主题化**
(1) 模块和插件支持多主题功能,手机主题和pc主题均可自由切换主题
(2) 开发者可参考 “目录结构” 中的 hicms模块示例
关于主体化设置,我们可参考如下图:
![](https://img.kancloud.cn/0c/83/0c83c2b7e7daa02a461159c92da299c0_1152x822.png)
#
## **2. 主题化深度开发**
当我们在后台操作设置了某个主题为默认主题时,意味着设置了该主题作为该模块的默认主题,前端home目录内控制器对应输出视图的目录都在这个主题目录里面,这点很好理解。但是,我们有时会遇到需要同时修改该应用前端控制器代码,甚至该应用的后台代码!从版本v1.2.1开始,我们都提供了这些深度开发操作!
**为了更好的描述,后面我们都以test命名的主题为例吧(目录结构里,都以这个test主题为例的)**:
目录或控制器对应关系如下图:
![](https://img.kancloud.cn/3c/8b/3c8b6c6c9f817801c8fb0785e2dbb0dd_1154x960.png)
我们要为这个应用,新增一个test主题,由于功能扩展比较多,需要新增或修改前端业务代码和后端代码,那么我们要在admin目录下新建test目录,home目录内新建test目录,这个两个目录用来存放后台和前端的控制器类。
**(1) 注意:这个命名必须要以PC主题名定义**
这些控制器可以是新增的扩展类,或者上一级目录(原默认)已经已存在的控制器类。
**(2) 自动实现重载**
举例:
(2.1). 我们在后台设置这个test主题为默认主题,看看后台admin控制器目录内程序是怎么执行的
如上图,我们看到, admin目录里有了控制器类Index.php,而admin目录下的test(二级控制器目录)也存在这个同名的控制器类文件,那么在程序执行流程中,test下的控制器类Index.php会执行重载操作, 覆盖admin控制器根目录下的Index.php 。
(2.2). 另外一种情况,test控制器目录内不存在时,但由于上一级目录已存在的控制器类,在前端需要的情况下,也会自动继承执行。 假如我们删了test控制器目录下的Index.php,上一级(admin根目录)中由于存在同名的Index.php, 那么会执行这个Index.php控制器类。 换句话说,**当设置theme中的test为默认主题时(后台应用主题管理里可手动设置,不设置默认default主题)**, 那么这个admin下的test目录内的控制器类会被优先执行。
(2.3). 如上图, home控制器目录同理。
**(3) 视图模板定位**
不管后台还是前端视图模板输出,都跟上面的优先执行原理一样。唯一区别的是theme内目录结构,它的最初的默认主题模板是存放在default目录下的!
**(4) 手机端视图模板定位提权**
(4.1) 我们可在每个应用配置里定义变量名为 ‘应用名’+_mobile_theme_only ,值为1 ,来提升 网站应用移动端的主题使用权限,同时也不会影响以后pc端建立主题;使用场景举例: 比如我们网站某个应用,要求是页面是自适应,即手机和pc端均有自己的主题模板,但当前先上线手机端, pc端以后再说,但是要求在pc端也能浏览到这个手机模板页面,那么定义好该变量即可实现! 就这样过了N天后,新的PC端页面要上线,那么我们只需按正常流程建立pc主题即可, 我们访问pc端会自动会定位到pc主题!
(4.2) 注意,这个配置非全站的,而是每个应用根据需要开启这项功能,不需要就不加入这个配置变量, 一切为了保持每个应用的灵活设计需求。
(图1)
![](https://img.kancloud.cn/69/a8/69a8fe932368996c96bf38970146d444_1568x722.png)
(图2)
![](https://img.kancloud.cn/c6/77/c67799dc6a0e4ef633ad9942117315cc_1354x327.png)