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


Posted in PHP onMarch 02, 2015

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

而原来定义response宏的方式可以实现,但我决定使用更加规范的方法。

laravel的View类里有一个方法 View::addNamespace ,这个方法在手册"开发扩展包"一节中有提到,不得不说Laravel手册排版逻辑混乱,这个方法说明应当放在"视图"章节才是,题外话就不说了,先来说说这个方法吧。

laravel渲染视图有一种写法:

View::make('namespace::path');

//例如 View::make('default::index.index');

如何定义namespace呢,就是通过这个方法啦:

View::addNamespace('default',app_path().'/views/default');

聪明的朋友可能已经感觉到了,这个功能可以助我们实现模板主题化,比如:

//注册蓝色主题

View::addNamespace('blue',app_path().'/views/blue');

//注册红色主题

View::addNamespace('red',app_path().'/views/red');

//注册绿色主题

View::addNamespace('green',app_path().'/views/green');

之后调用:

//渲染绿色主题下的index.index模板

View::make('green::index.index');

然而我们需要事先通过View::addNamespace方法先注册这几个主题的路径映射,并且在渲染的时候需要显式指定namespace.

我感觉不是很方便,难道View不能设定一个默认的namespace吗?这样我们只要一次设置比如:

//我们可以把这个写在 __construct 里面

View::setDefaultNamespace('blue',app_path().'/views/blue');

之后:

//实际上相当于 View::make('blue::index.index');

View::make('index.index');

更进一步,我们可以通过后台设置主题,把主题名写进数据库,前台读取并设置主题:

//假设从数据库中读取配置,Option是模型类

$theme = Option::getByKey('theme');

View::setDefaultNamespace($theme,app_path().'/views/'.$theme);

这样就实现了后台切换主题了。

但是很遗憾,View并没有setDefaultNamespace方法,所以我决定创建一个项目,专门针对laravel进行核心类库扩展,这个功能已经实现,可以查看我的项目:项目地址 ,在src/Keepeye/Laravel/View/查看使用方法吧。

好了,关于laravel模板主题功能的实现,我们就探讨到这里了,希望大家能够喜欢。

PHP 相关文章推荐
phpfans留言版用到的数据操作类和分页类
Jan 04 PHP
开源SNS系统-ThinkSNS
May 18 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
laravel 配置路由 api和web定义的路由的区别详解
Sep 03 PHP
对laravel的session获取与存取方法详解
Oct 08 PHP
基于php解决json_encode中文UNICODE转码问题
Nov 10 PHP
PHP中->和=>的意思
Mar 31 PHP
laravel 5 实现模板主题功能
Mar 02 #PHP
Opcache导致php-fpm崩溃nginx返回502
Mar 02 #PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 #PHP
Laravel5中contracts详解
Mar 02 #PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 #PHP
初识laravel5
Mar 02 #PHP
避免Smarty与CSS语法冲突的方法
Mar 02 #PHP
You might like
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
php微信开发之上传临时素材
2016/06/24 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
Python线程的两种编程方式
2015/04/14 Python
python实现简单登陆流程的方法
2018/04/22 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
世界上最大的乐器零售商:Guitar Center
2017/11/07 全球购物
2014自主招生自荐信策略
2014/01/27 职场文书
周年庆促销方案
2014/03/15 职场文书
难忘的一天教学反思
2014/04/30 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
公司贷款承诺书
2014/05/30 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
奖学金感谢信
2015/01/21 职场文书
浅析Django接口版本控制
2021/06/26 Python
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python