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 相关文章推荐
php 缓存函数代码
Aug 27 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
PHP中Memcache操作类及用法实例
Dec 12 PHP
Zend Framework分页类用法详解
Mar 22 PHP
PHP二进制与字符串之间的相互转换教程
Oct 14 PHP
PHP 常用时间函数资料整理
Oct 22 PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 PHP
windows环境下使用Composer安装ThinkPHP5
May 18 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 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
example1.php
2006/10/09 PHP
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
PHP 面向对象 final类与final方法
2010/05/05 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
PHP类型约束用法示例
2016/09/28 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
学习面向对象之面向对象的术语
2010/11/30 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
python局域网ip扫描示例分享
2014/04/03 Python
Python3安装Pymongo详细步骤
2017/05/26 Python
python实现抖音视频批量下载
2018/06/20 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
python可视化篇之流式数据监控的实现
2019/08/07 Python
Python turtle绘画象棋棋盘
2019/08/21 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
2013年高中生自我评价
2013/10/23 职场文书
电子商务专业个人的自我评价
2013/11/19 职场文书
教师个人自我评价范文
2014/04/13 职场文书
浪漫婚礼主题活动策划方案
2014/09/15 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
2015最新民情日记范文
2015/06/26 职场文书