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_xmlhttp 乱码问题解决方法
Aug 07 PHP
通达OA公共代码 php常用检测函数
Dec 14 PHP
PHP中feof()函数实例测试
Aug 23 PHP
php curl 上传文件代码实例
Apr 27 PHP
初识ThinkPHP控制器
Apr 07 PHP
PHP书写格式详解(必看)
May 23 PHP
php版银联支付接口开发简明教程
Oct 14 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
PHP memcache在微信公众平台的应用方法示例
Sep 13 PHP
PHP的mysqli_stat()函数讲解
Jan 23 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
php字符串过滤strip_tags()函数用法实例分析
Jun 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解析xml 的四种简单方法(附实例)
2016/07/11 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
javascript Keycode对照表
2009/10/24 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
vue 点击按钮增加一行的方法
2018/09/07 Javascript
vue多次循环操作示例
2019/02/08 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
Python实现网站注册验证码生成类
2017/06/08 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
枚举与#define宏的区别
2014/04/30 面试题
求职简历自荐信
2013/10/20 职场文书
机关党员公开承诺书
2014/08/30 职场文书
刘胡兰观后感
2015/06/16 职场文书
高中数学教学反思范文
2016/02/18 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript
html实现弹窗的实例
2021/06/09 HTML / CSS
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA
动态规划之使用备忘录来改进Javascript函数
2022/04/07 Javascript