thinkphp实现模板切换

thinkphp实现模板切换

首先在后台某个接口读取模板

Admin\Common\function.php

/*
 * 获取模板目录
 */
function getDir($dir) {
    $dir=scandir($dir);
    for ($i=0;$i<count($dir);$i++){
        if ($dir[$i]=='.'){
            unset($dir[$i]);
        }
        if ($dir[$i]=='..'){
            unset($dir[$i]);
        }     
    }
    $dir=array_merge($dir);
    for ($i=0;$i<count($dir);$i++){
        if ($dir[$i]=='index.html'){
            unset($dir[$i]);
        }
    }   
    $dir=array_merge($dir);
    return $dir;
}

Admin\Controller\SystemController.class.php

    /*
     * 系统设置
     */
    public function systemBase()
    {

            // 获取模板目录
            $dir = "./App/Home/View";
            $file = getDir($dir);
            $this->assign('file', $file);
            $this->display();
    }

Admin\View\System\systemBase.html

<select name="template" class="select" id="template">
	<volist name="file" id="vo">
		<option value="{$vo}" <if condition="$data.template eq $vo ">selected="selected"</if> >{$vo}</option>
	</volist>
</select>

前台

Home\Conf\config.php

<?php
return array(
	//'配置项'=>'配置值'
    'DEFAULT_THEME'       =>  'htmlv1.0', // 设置默认的视图层名称
);

新建公共控制器

CommonController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
class CommonController extends Controller {
    /*
     * 初始化方法
     * 2017年4月19日10:08:52
     */
    public function _initialize(){
        $data=F('system');
        if (empty($data)){
            $model=M('system');
            $data=$model->where("id=%d",1)->find();
            F('system',$data);
        }
        if (!empty($data['template'])){
            C('DEFAULT_THEME',$data['template']);
        }      
    }      
}

前台视图

Home\View\htmlv1.0

Home\View\htmlv2.0

Home\View\htmlv3.0

Home\View\htmlv5.0

即可实现切换模板

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏开源优测

接口测试 | 21 基于flask弄个restful API服务出来

概述 上篇我们很简单的分享了如何基于flask搞一个支持http GET\POST\HEAD\DELETE方法的服务,大家可以根据这个简单的实例进行扩展。 下面...

3469
来自专栏7号代码

Android开发高级进阶——Service与Notification

Service是处理一些后台任务,在主线程中,并不能执行耗时操作。而Thread是开启一个子线程,在子线程中执行耗时操作,这样不会阻塞主线程。

1234
来自专栏Android-薛之涛

Activity启动模式(launchMode)详解

      好了,今天想整理一下Activity启动模式的笔记,毕竟项目开发中有涉及且之前面试都有问道,抽周末做个总结。

1122
来自专栏数据和云

New in 12.2- 让每个PDB都拥有自己的 local undo表空间

12.1引入temp undo概念 ,12.2引入local undo,也就是每个pdb拥有自己的undo表空间(以前版本共用一个undo表空间),rac中每个...

3655
来自专栏24K纯开源

Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

序言     使用Ubuntu和vim已经有一段时间了,对于Vim下的插件应用,我总是抱着一股狂热的态度。这次,又在网上闲逛着,发现了一个个人博客提到了Vim代...

26710
来自专栏Spring相关

创建一个Android项目

Generate Layout File勾选的话会默认创一个默认的布局,launcher Activity只的是把当前的类当做主活动

914
来自专栏进击的君君的前端之路

webpack

1412
来自专栏数据和云

Oracle 12.2 新特性 | PDB不同字符集变更深入解析

从12c版本12.1开始,就有了新特性——Pluggable Database,相比较之前通过schema的管理方式实现多用户管理,Pluggable Data...

3509
来自专栏向治洪

Android 进程回收之LowMemoryKiller原理篇

在前面的文章Android进程保活一文中,对于LowMemoryKiller的概念做了简单的提及。LowMemoryKiller简称低内存杀死机制。简单来说,L...

35310
来自专栏数据和云

Oracle 12c多租户特性详解:全局用户与本地用户的原理与维护

? 前情回顾:Oracle 12c多租户特性详解:从Schema到PDB的变化与隔离 COMMON 和 Local 用户 无论在 CDB 和 Non-CDB...

2985

扫码关注云+社区