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模拟SQL Server的两个日期处理函数
Oct 09 PHP
用ODBC的分页显示
Oct 09 PHP
header跳转和include包含问题详解
Sep 08 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
PHP冒泡算法详解(递归实现)
Nov 10 PHP
php打印一个边长为N的实心和空心菱型的方法
Mar 02 PHP
基于php判断客户端类型
Oct 14 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
Yii框架实现多数据库配置和操作的方法
May 25 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
Jun 04 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 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
模仿OSO的论坛(三)
2006/10/09 PHP
php生成随机数或者字符串的代码
2008/09/05 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
Jquery 插件开发笔记整理
2011/01/17 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
jQuery实现图片上传和裁剪插件Croppie
2015/11/29 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
python检测远程服务器tcp端口的方法
2015/03/14 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
python logging模块的使用总结
2019/07/09 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
应届本科生推荐信范文
2013/12/25 职场文书
大学生操行评语大全
2014/12/31 职场文书
推广普通话的宣传语
2015/07/13 职场文书
会议简报格式范文
2015/07/20 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
Python实现拼音转换
2021/06/07 Python