一个小项目,需要配置多套前端主题。解决的思路是根据域名加载不同的主题配置。
一、在应用目录 application 下创建 common 目录。
二、application/common 目录下创建 HomeBase 控制器。代码如下:
domain() ?? '';
$domain = substr($domain,strrpos($domain,'://')+3);
///设置前端当前使用主题
$this->view->config('view_path',config('template')[$domain] ?? './template/default/');
}
}
三、前端代码的 controller 都继承 HomeBase 基类即可。
四、主题配置文件 template.php 的文件内容如下:
'./template/otd/',
'def.bailoo.xin' => './template/default/'
);
静态化的方案基本已经ok,可以测试一下了。
================= 我是邪恶的分割线 =================
如果想修改成后台可以动态修改的,
可以将目前已有的几套主题{./template/otd/、./template/default/} 放到配置表中,
后台操作声明关联关系,通过关联关系表内的数据动态重置模板配置文件。
核心代码如下:
///重置模板配置文件
public function resetTemplateFile(){
$template_config_path = CONF_PATH.'/extra/template.php';
if(!file_exists($template_config_path)){throw new \Exception('请检查模板配置文件');}
file_put_contents($template_config_path,"where(['node_url'=>['neq',''],'use_template_path'=>['neq','']])->column('node_url,use_template_path'))->toArray(),true).';');
}