laravel 5 实现模板主题功能

 很多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的第二个参数。

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

时间: 2024-11-03 21:22:24

laravel 5 实现模板主题功能的相关文章

laravel 5 实现模板主题功能(续)

 前面一篇文章,我们简单讨论了laravel模板主题功能,本文我们继续探讨laravel模板主题功能的实现,本次实现比较重,有兴趣慢慢看吧.     在之前一篇文章中我介绍了通过定义Response宏的方式来实现动态改变模板文件路径以实现主题功能: laravel实现模板主题功能,但后来我发现这种方法有个弊端,在模板中使用@extends必须显式指定模板路径,这可能造成混乱,我决定还是改变思想,主题和主题之间应该是完全隔离的,不存在就是不存在,不要自动去另外的主题中寻找替代的模板. 而原来定义r

laravel 5 实现模板主题功能(续)_php实例

在之前一篇文章中我介绍了通过定义Response宏的方式来实现动态改变模板文件路径以实现主题功能: laravel实现模板主题功能,但后来我发现这种方法有个弊端,在模板中使用@extends必须显式指定模板路径,这可能造成混乱,我决定还是改变思想,主题和主题之间应该是完全隔离的,不存在就是不存在,不要自动去另外的主题中寻找替代的模板. 而原来定义response宏的方式可以实现,但我决定使用更加规范的方法. laravel的View类里有一个方法 View::addNamespace ,这个方法

laravel 5 实现模板主题功能_php实例

众所周知,laravel渲染模板是通过View::make()实现的,需要显式指定模板文件路径: 复制代码 代码如下: function index() {     return View::make('index.index'); } 既然这样,我们就可以自己实现模板主题功能,我们只需要将模板文件放到一个主题名称对应的目录里就行,比如默认主题为 default 的话,我们就这样写: 复制代码 代码如下: function index() {     return View::make('def

PowerPoint 2010使用主题功能统一文档风格

使用PowerPoint 2010 创建演示文稿的时候,可以通过使用主题功能来快速的美化和统一每一张幻灯片的风格. 在设计选项卡主题选项组中单击其他按钮打开主题库,在主题库当中可以非常轻松的选择某一个主题.将鼠标移动到某一个主题上,就可以实时预览到相应的效果.最后单击某一个主题,就可以将该主题快速应用到整个演示文稿当中. 文档风格-powerpoint主题下载"> 如果对主题效果的某一部分元素不够满意,可以通过颜色.字体或者效果进行修改.可以单击颜色按钮,在下拉列表当中选择一种自己喜欢的颜

MindMapper新建多个子主题功能如何妙用

  首先,当您在创建多个重要主题或子主题时,您有可以利用的其他文本,原本您是需要一个字一个字打到导图中,且将他们分成多个子主题,或者您用F6功能(详情请参考神奇的MindMapper F6功能),也能很快完成一个主题;但若是您选择MindMapper新建多个子主题功能,绝对又比F6功能更加省力的完成导图这一部分. 点击"新建主题>多个子主题",会弹出"插入多个主题"对话框; 您可以将其他应用程序上现有的内容复制粘贴到该对话框中,注意是每行创建一个主题; 单击确

微信公众平台模板消息功能怎么使用?

  微信公众平台怎么添加设置模板功能,详细讲解如何使用. 1.进入自己的微信公众平台,然后在"功能 "里面添加"模板消息 "功能,如下图所示. 2.然后点击"模板消息 "功能,进入模板库,如下图所示,这是以前版本,那么现在版本排版不一样 3.最上面是你微信公众平台所在的行业,你可以自行修改,一个月内只可以修改一次,每个行业的模板功能都不一样,如下图所示 4.然后在下面众多模板中找到自己需要的模板功能,点击"详情 "进入,如下图

百度推出基于AI的情人节主题功能;牛津大学2017自然语言处理课程公开(附视频及PPT) | AI开发者头条

情人节降至,百度推出基于 AI 的魅力值测评和诗歌自动生成主题功能 百度搜索在近日推出了基于人工智能技术的"情人节用脸撩,开启桃花运"功能,迎接情人节.用户在百度搜索 App 中需用语音说一句"开启桃花运"即可进入主题页面.该页面包含两大核心功能:一个是"自拍撩汉/妹指数",即根据照片颜值打分的功能,另一个则是输入姓名/地点后自动生成专属诗歌的功能. 详情:http://www.leiphone.com/news/201702/nyTmxpTMd

超实用户外休闲类网站模板,功能多多免费下载

超实用户外休闲类网站模板,功能多多,免费下载了! &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 超多超漂亮,大气又实用,还有可视化管理编辑后台,上百种功能管理模块,吐血分享! 免费试用下载地址:http://www.e000.com/design/site_package.php?s=xin

listview-android 实现主题功能

问题描述 android 实现主题功能 我想做一个这样的功能,一个listview列表,点击不同的item的时候会改变该项目所有的linearlayout的背景色,并且改变所有图片的背景色. 比如我点击第一个,则所有的linearlayout背景变成黄色,然后图片也从白色的圆圈变成黄色的圆圈.这个怎么做??? 解决方案 Android主题切换方案总结 解决方案二: http://gundumw100.iteye.com/blog/1052260