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 相关文章推荐
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
Oct 09 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
May 02 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
PHP浮点数精度问题汇总
May 13 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
PHP引擎php.ini参数优化深入讲解
Mar 24 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
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
Symfony的安装和配置方法
2016/03/17 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
JavaScript中valueOf函数与toString方法深入理解
2012/12/02 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
python连接MySQL数据库实例分析
2015/05/12 Python
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
python处理html转义字符的方法详解
2016/07/01 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
python获取外网IP并发邮件的实现方法
2017/10/01 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
Python对象与引用的介绍
2019/01/24 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
python实现对输入的密文加密
2019/03/20 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
Python如何读写字节数据
2020/08/05 Python
会计助理岗位职责
2014/02/17 职场文书
林肯就职演讲稿
2014/05/19 职场文书
投资意向书
2014/07/30 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
2015年端午节活动方案
2015/05/05 职场文书
借条如何写
2015/05/26 职场文书
2016公务员年度考核评语
2015/12/01 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书