laravel 5 实现模板主题功能

 更新时间:2015年03月02日 14:29:16   投稿:hebedich   我要评论
很多cms里都有模板主题功能,我们可以通过一个配置切换主题,这个功能在laravel下如何实现呢?今天我们就来探讨下这个问题。

众所周知,laravel渲染模板是通过View::make()实现的,需要显式指定模板文件路径:

复制代码 代码如下:

function index()
{
    return View::make('index.index');
}

既然这样,我们就可以自己实现模板主题功能,我们只需要将模板文件放到一个主题名称对应的目录里就行,比如默认主题为 default 的话,我们就这样写:

复制代码 代码如下:

function index()
{
    return View::make('default.index.index');
}

自定义主题 custom :

复制代码 代码如下:

function index()
{
    return View::make('custom.index.index');
}

从配置文件中读取主题名:

复制代码 代码如下:

function index()
{
    return View::make(Config::get('app.theme','default').'.index.index');
}

这样基本就实现模板主题化的功能了,但还存在一个问题,那就是custom主题必须实现所有default主题的所有模板,否则会导致某些页面模板文件不存在报错,那么进一步优化:

复制代码 代码如下:

function index()
{
    $theme = Config::get('app.theme','default');
    $tpl = $theme.'.index.index';
    if (!View::exists($tpl)) {
        $tpl = 'default.index.index';
    }
    return View::make($tpl);
}

就是在渲染模板之前,先检测模板文件是否存在,不存在的话则使用default主题中对应的模板。

这么多行代码,我们可以继续封装一下,这时候要用到Response对象了,我们知道 Response::view() 等同于 View::make(),而Response还有一个方法Response::macro()方法可以用来定义一个宏,我们可以把逻辑封装到宏里面:

复制代码 代码如下:

Response::macro('render',function($path,$data=array()){
    $theme = Config::get('app.theme','default');
    $tpl = $theme.'.'.$path;
    if (!View::exists($tpl)) {
        $tpl = 'default.' . $path;
    }
    return Response::view($tpl,$data);
});

使用:

复制代码 代码如下:

function index()
{
    $bindings = array(
        'title' => '首页'
    );
    return Response::render('index.index',$bindings);
}

需要注意的是传入模板的变量得通过Response::render的第二个参数。

今天的教程就先到这里吧,后续我们再来深入分析一下,希望大家能够喜欢。

相关文章

  • 基于CakePHP实现的简单博客系统实例

    基于CakePHP实现的简单博客系统实例

    这篇文章主要介绍了基于CakePHP实现的简单博客系统,以一个完整实例分析了使用CakePHP实现博客系统的完整流程,需要的朋友可以参考下
    2015-06-06
  • 用PHP做了一个领取优惠券活动的示例代码

    用PHP做了一个领取优惠券活动的示例代码

    这篇文章主要介绍了用PHP做了一个领取优惠券活动的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • ThinkPHP框架结合Ajax实现用户名校验功能示例

    ThinkPHP框架结合Ajax实现用户名校验功能示例

    这篇文章主要介绍了ThinkPHP框架结合Ajax实现用户名校验功能,涉及thinkPHP使用ajax与后台控制交互、数据库查询、判定等相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • CI框架Session.php源码分析

    CI框架Session.php源码分析

    Session类并不使用PHP本身的session,而是使用类自己的session,这样做,可以给开发者提供更大的弹性。下面我们就来仔细分析下CI框架的Session类Session.php文件
    2014-11-11
  • thinkphp中空模板与空模块的用法实例

    thinkphp中空模板与空模块的用法实例

    这篇文章主要介绍了thinkphp中空模板与空模块的用法,以实例形式演示了空模板与空模块具体实现方法,一般空模块多用于系统找不到指定模块的情况,如定位错误页面与URL优化等情况,具有一定的实用价值,需要的朋友可以参考下
    2014-11-11
  • CI框架开发新浪微博登录接口源码完整版

    CI框架开发新浪微博登录接口源码完整版

    说明:本贴只适合CI框架。功能实现:登录接口跳转链接成功,获取用户信息(包括最重要的u_id)成功,将用户于本地平台连接起来,用户登录成功后信息的存储,本地数据库第三方登录表的设计。总之接口流程已全部完成。每个关键步骤我几乎都有注释,讲解详细。
    2014-05-05
  • 将文件夹压缩成zip文件的php代码

    将文件夹压缩成zip文件的php代码

    在php中生成zip其实很简单,只要下面2步就能完成。
    2009-12-12
  • Ajax提交表单时验证码自动验证 php后端验证码检测

    Ajax提交表单时验证码自动验证 php后端验证码检测

    Ajax提交表单时实现验证码自动验证,验证码先检测正确性,不正确则不提交表单,更新验证码,php后端验证码检测,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • php加密算法之实现可逆加密算法和解密分享

    php加密算法之实现可逆加密算法和解密分享

    对于大部分密码加密,我们可以采用md5、sha1等方法。可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密。对于需要还原的信息,则需要采用可逆的加密解密算法,下面一组PHP函数是实现此加密解密的方法
    2014-01-01
  • PHP不用递归遍历目录下所有文件的代码

    PHP不用递归遍历目录下所有文件的代码

    这篇文章主要介绍了PHP不用递归实现列出目录下所有文件的代码,本文列出了两种方法,并和递归方法做了一个对比,需要的朋友可以参考下
    2014-07-07

最新评论