laravel 5 实现模板主题功能(续)

 前面一篇文章,我们简单讨论了laravel模板主题功能,本文我们继续探讨laravel模板主题功能的实现,本次实现比较重,有兴趣慢慢看吧。

 
 

在之前一篇文章中我介绍了通过定义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);

时间: 2024-10-04 00:19:03

laravel 5 实现模板主题功能(续)的相关文章

laravel 5 实现模板主题功能(续)_php实例

在之前一篇文章中我介绍了通过定义Response宏的方式来实现动态改变模板文件路径以实现主题功能: laravel实现模板主题功能,但后来我发现这种方法有个弊端,在模板中使用@extends必须显式指定模板路径,这可能造成混乱,我决定还是改变思想,主题和主题之间应该是完全隔离的,不存在就是不存在,不要自动去另外的主题中寻找替代的模板. 而原来定义response宏的方式可以实现,但我决定使用更加规范的方法. laravel的View类里有一个方法 View::addNamespace ,这个方法

laravel 5 实现模板主题功能

 很多cms里都有模板主题功能,我们可以通过一个配置切换主题,这个功能在laravel下如何实现呢?今天我们就来探讨下这个问题.     众所周知,laravel渲染模板是通过View::make()实现的,需要显式指定模板文件路径:   代码如下: function index() { return View::make('index.index'); }   既然这样,我们就可以自己实现模板主题功能,我们只需要将模板文件放到一个主题名称对应的目录里就行,比如默认主题为 default 的话,

laravel 5 实现模板主题功能_php实例

众所周知,laravel渲染模板是通过View::make()实现的,需要显式指定模板文件路径: 复制代码 代码如下: function index() {     return View::make('index.index'); } 既然这样,我们就可以自己实现模板主题功能,我们只需要将模板文件放到一个主题名称对应的目录里就行,比如默认主题为 default 的话,我们就这样写: 复制代码 代码如下: function index() {     return View::make('def

PowerPoint 2010使用主题功能统一文档风格

使用PowerPoint 2010 创建演示文稿的时候,可以通过使用主题功能来快速的美化和统一每一张幻灯片的风格. 在设计选项卡主题选项组中单击其他按钮打开主题库,在主题库当中可以非常轻松的选择某一个主题.将鼠标移动到某一个主题上,就可以实时预览到相应的效果.最后单击某一个主题,就可以将该主题快速应用到整个演示文稿当中. 文档风格-powerpoint主题下载"> 如果对主题效果的某一部分元素不够满意,可以通过颜色.字体或者效果进行修改.可以单击颜色按钮,在下拉列表当中选择一种自己喜欢的颜

MindMapper新建多个子主题功能如何妙用

  首先,当您在创建多个重要主题或子主题时,您有可以利用的其他文本,原本您是需要一个字一个字打到导图中,且将他们分成多个子主题,或者您用F6功能(详情请参考神奇的MindMapper F6功能),也能很快完成一个主题;但若是您选择MindMapper新建多个子主题功能,绝对又比F6功能更加省力的完成导图这一部分. 点击"新建主题>多个子主题",会弹出"插入多个主题"对话框; 您可以将其他应用程序上现有的内容复制粘贴到该对话框中,注意是每行创建一个主题; 单击确

微信公众平台模板消息功能怎么使用?

  微信公众平台怎么添加设置模板功能,详细讲解如何使用. 1.进入自己的微信公众平台,然后在"功能 "里面添加"模板消息 "功能,如下图所示. 2.然后点击"模板消息 "功能,进入模板库,如下图所示,这是以前版本,那么现在版本排版不一样 3.最上面是你微信公众平台所在的行业,你可以自行修改,一个月内只可以修改一次,每个行业的模板功能都不一样,如下图所示 4.然后在下面众多模板中找到自己需要的模板功能,点击"详情 "进入,如下图

百度推出基于AI的情人节主题功能;牛津大学2017自然语言处理课程公开(附视频及PPT) | AI开发者头条

情人节降至,百度推出基于 AI 的魅力值测评和诗歌自动生成主题功能 百度搜索在近日推出了基于人工智能技术的"情人节用脸撩,开启桃花运"功能,迎接情人节.用户在百度搜索 App 中需用语音说一句"开启桃花运"即可进入主题页面.该页面包含两大核心功能:一个是"自拍撩汉/妹指数",即根据照片颜值打分的功能,另一个则是输入姓名/地点后自动生成专属诗歌的功能. 详情:http://www.leiphone.com/news/201702/nyTmxpTMd

超实用户外休闲类网站模板,功能多多免费下载

超实用户外休闲类网站模板,功能多多,免费下载了! &http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 超多超漂亮,大气又实用,还有可视化管理编辑后台,上百种功能管理模块,吐血分享! 免费试用下载地址:http://www.e000.com/design/site_package.php?s=xin

listview-android 实现主题功能

问题描述 android 实现主题功能 我想做一个这样的功能,一个listview列表,点击不同的item的时候会改变该项目所有的linearlayout的背景色,并且改变所有图片的背景色. 比如我点击第一个,则所有的linearlayout背景变成黄色,然后图片也从白色的圆圈变成黄色的圆圈.这个怎么做??? 解决方案 Android主题切换方案总结 解决方案二: http://gundumw100.iteye.com/blog/1052260