简单暴力的TP5多主题方案
一个小项目,需要配置多套前端主题。解决的思路是根据域名加载不同的主题配置。
一、在应用目录 application 下创建 common 目录。
二、application/common 目录下创建 HomeBase 控制器。代码如下:
<?php
namespace app\common\controller;
use think\Request;
///前端基类控制器
class HomeBase extends CommonBase
{
public function __construct(Request $request = null)
{
///
parent::__construct($request);
///获取当前域名
$domain = request()->domain() ?? '';
$domain = substr($domain,strrpos($domain,'://')+3);
///设置前端当前使用主题
$this->view->config('view_path',config('template')[$domain] ?? './template/default/');
}
}
三、前端代码的 controller 都继承 HomeBase 基类即可。
四、主题配置文件 template.php 的文件内容如下:
<?php
return array (
'bailoo.xin' => './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,"<?php ".PHP_EOL.PHP_EOL." return ".var_export(collection($this->where(['node_url'=>['neq',''],'use_template_path'=>['neq','']])->column('node_url,use_template_path'))->toArray(),true).';');
}
简单暴力的TP5多主题方案的更多相关文章
- PHP搭建简单暴力的mvc
对于一个web系统来说,我们使用mvc很必要, 给我们带来的是清晰的结构,易运维,易扩展, mvc 我对其的理解应该叫mxvc, 多了一个x , 这个x代表什么,x可以理解为 relay,proxy, ...
- $NOIP2018$ 暴踩全场计划实施方案
\(NOIP2018\) 暴踩全场计划实施方案 改完题辣!该更博辣!(这么激动干嘛反正又没人看) 我要取一个霸气的名字.于是就这样了.原本打算是暴踩yyb计划实施方案的(来啊互相伤害啊) 信心流选手就 ...
- KVC/KVO之暴力的KVC
本章将分为三个部分: KVC是什么 KVC之Set/Get KVC键值路径之Set/Get KVC是什么 KVC,即 NSKeyValueCoding,一个非正式的 Protocol,提供一种机制来间 ...
- ICCV2021 | 简单有效的长尾视觉识别新方案:蒸馏自监督(SSD)
前言 本文提出了一种概念上简单但特别有效的长尾视觉识别的多阶段训练方案,称为蒸馏自监督(Self Supervision to Distillation, SSD).在三个长尾识别基准:Ima ...
- Android 学习笔记之 个人认为最简单的查看Android源码方案
相信很多人都会疑惑如何使用Eclipse ADT查看源码? 下面我们将介绍 如何查看Android源码. 本文有如下优点: 1.不用费心去找Android源码地址:一个字烦,网上的东西杂七杂八的... ...
- DS控件库 一个简单的血条颜色渐变方案
Private Sub DS按钮1_ButtonClick(Sender As Object) Handles DS按钮1.ButtonClick Dim T As New Threading.Thr ...
- 两个简单的API限流实现方案
1, Ngnix限流 Nginx在架构中起到请求转发与负载均衡器的作用.外部req首先到Nginx监听的80端口,然后Nginx将req交给到监听8080端口的APP服务器处理.处理结果再经由Ngin ...
- mac上完整卸载删除.简单粗暴无脑:androidstudio删除方案
如果你是mac ,你删除as ,删不干净也正常,你会发现安装的时候,前面的东西也在.配置文件在,会导致你以前的错误不想要的东西都在. 废话不多说,复制粘贴就是干!!!!~~~~~~~~ 第一步: 复 ...
- 正则效验url
上篇文章讲到多主题的解决方案:简单暴力的TP5多主题方案 为了简化配置,所以将域名前的协议 http/https 截取了. 后台配置时就需要效验配置的格式是否正确,需要用到的正则代码如下: /*** ...
随机推荐
- idea的项目中output框出现乱码
找到tomcat的安装目录中的logging.properties 我的在这里:E:\tools\tomcat\apache-tomcat-8.5.38\conf 改其中的参数 修改前 java.u ...
- 结构化编程-Structured programming
结构话编程强调的是对流程的控制: 它为面向过程编程提供天然的支持. Structured programming is a programming paradigm aimed at improvin ...
- Unity的SendMessage方法
用法(该对象所有脚本都能收到): gameObject.SendMessage("要执行的方法名"); 通知的另一种实现: gameObject.GetComponent<脚 ...
- Unity 脚本挂载位置
原则:谁的脚本,挂载到谁身上 1,一般场景中会有个GameController脚本,挂在空物体上. 2,我见很多人脚本习惯挂到Camera上,好吧,不知算不算规范.
- 03 Winform基础
补充: MD5加密 static void Main(string[] args) { string s = GetMD5("123"); Console.WriteLine(s) ...
- Vue组件之作用域插槽
写作用域插槽之前,先介绍一下Vue中的slot内容分发: 如果<child-component></child-component>标签之间没有插入那两个p标签的话,页面会显示 ...
- 2019-03-18 Python time 将2015年11月20日转换为2015-11-20
#ReportingDate = soup.select('body > div.main > div > div.ctr > div.recruit > ul > ...
- 紫书 例题8-1 UVa 120(构造法)
#include<cstdio> #include<iostream> #include<sstream> #include<algorithm> #d ...
- java实例化对象的五种方法
1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反射手段,调用java.lang.Cla ...
- maven 构建web项目
Maven规定,必须创建以下几个Source Folder src/main/resources src/main/Java src/test/resources src/test/java 添加以上 ...