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 相关文章推荐
dedecms模版制作使用方法
Apr 03 PHP
MySQL授权问题总结
May 06 PHP
PHP中ADODB类详解
Mar 25 PHP
个人写的PHP验证码生成类分享
Aug 21 PHP
smarty中js的调用方法示例
Oct 27 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
ThinkPHP添加更新标签的方法
Dec 05 PHP
php判断一个数组是否为有序的方法
Mar 27 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
php+croppic.js实现剪切上传图片功能
Aug 14 PHP
TP5框架安全机制实例分析
Apr 05 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
PHP 开发工具
2006/12/06 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
浅谈php fopen下载远程文件的函数
2016/11/18 PHP
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
Javascript 强制类型转换函数
2009/05/17 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
JS实现非首屏图片延迟加载的示例
2018/01/06 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
react中hook介绍以及使用教程
2020/12/11 Javascript
Python实现带百分比的进度条
2016/06/28 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
利用python实现AR教程
2019/11/20 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
科室工作的个人自我评价
2013/10/30 职场文书
销售工作岗位职责
2013/12/24 职场文书
《雷雨》教学反思
2014/02/20 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
我的中国心演讲稿
2014/09/04 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
python标准库ElementTree处理xml
2022/05/20 Python
利用Apache Common将java对象池化的问题
2022/06/16 Servers