php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy
Yii2主题(Theme)用法详解
本文实例讲述了Yii2主题(Theme)用法。分享给大家供大家参考,具体如下:
首先看看主要的配置方式:
'components' => [
'view' => [
'theme' => [
'pathMap' => ['@app/views' => '@app/themes/basic'],
'baseUrl' => '@web/themes/basic',
],
],
],
Yii中的主题功能主要由yii\base\Theme类来实现,它的主要思想是:先定义好一个一一对应的字符串映射数组,然后对给定的字符串按照数组中的映射关系进行字符串替换。
有如下映射:
$pathMap=[
'@app/a' => '@app/aaa',
'@app/b' => '@app/bbb',
'@app/c' => [
'@app/ccc/xxx',
'@app/ccc/yyy',
],
];
对字符串 @app/a/site/index.php,由上面的映射关系可知会把@app/a替换为@app/aaa,生成结果为@app/aaa/site/index.php。
但要注意,这个还不是最终的结果。由于在Yii中是对文件路径的操作,所以如果@app/aaa/site/index.php这个文件存在的话,则会返回这个路径,否则返回原路径即:@app/a/site/index.php
如果有字符串@app/c/site/index.php,由于上面的映射知道@app/c对应2个替换项,Yii会从前开始依次替换,先生成@app/ccc/xxx/site/index.php,如果这个文件存在,则返回这个路径,否则继续替换。
如果所有的替换结果都不存在对应的文件,那么最后返回原路径。
同时写多个替换的目标值有这么一个好处:实现主题的继承。
现在有一套默认的主题default,如果现在要增加一套黑色的主题,有两个办法可以实现。
第一种:把所有的default中的视图全部复制一份到blank目录中。
第二种:只复制一份layout布局文件到blank目录中,然后在布局文件中修改整体颜色。然后设置为
$pathMap=[
'@app/c' => [
'@app/ccc/blank',
'@app/ccc/default',
],
];
好处看到了吧,如果在blank中没有找到文件,会从default中来查找,也就是说blank中的文件会覆盖default中存在的文件,从而实现了主题的继承。
主题中的属性:
$pathMap:这个就是用来设置替换映射关系的。
'pathMap' =>[
'@app/views' => [
'@app/themes/blank',
'@app/themes/default',
],
'@app/modules' => '@app/themes/default/modules',
'@app/widgets' => '@app/themes/default/widgets'
],
这三个分别对views、modules和widgets应用主题。
$baseUrl:这个用来设置要访问的资源的url(结尾不加“/”)
$basePath:设置资源所在的文件目录
主题中的方法:
public function init()
public function init()
{
parent::init();
//如果没有设置$pathMap映射,则使用$basePath,
if (empty($this->pathMap)) {
/*
* 如果$basePath也没有设置,则出异常。
* 也就是说 $pathMap和$basePath至少要设置一个,如果两个都设置了,优先使用$pathMap
*/
if (($basePath = $this->getBasePath()) === null) {
throw new InvalidConfigException('The "basePath" property must be set.');
}
//设置当前模块的路径和$basePath的映射关系
$this->pathMap = [Yii::$app->getBasePath() => [$basePath]];
}
}
public function applyTo($path)
//这个就是按照 $pathMap中的定义的映射关系来对$path进行替换字符串的
public function applyTo($path)
{
//对路径中的"/"、“\”进行统一替换
$path = FileHelper::normalizePath($path);
foreach ($this->pathMap as $from => $tos) {
//映射数组中的来源(旧值)
$from = FileHelper::normalizePath(Yii::getAlias($from)) . DIRECTORY_SEPARATOR;
//如果在$path中有可替换的旧值
if (strpos($path, $from) === 0) {
$n = strlen($from);
//对目标值循环,
foreach ((array) $tos as $to) {
$to = FileHelper::normalizePath(Yii::getAlias($to)) . DIRECTORY_SEPARATOR;
//把$path中的$from替换为$to
$file = $to . substr($path, $n);
//如果是文件,直接返回
if (is_file($file)) {
return $file;
}
}
}
}
return $path;
}
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。相关阅读:
升级Win10系统后音响设备出现杂音如何解决
jQuery Mobile操作HTML5的常用函数总结
Windows7系统开启Telnet服务方法图文教程
DevExpress之ChartControl用法实例总结
Javascript与jQuery方法的隐藏与显示
Java的云打印Lodop
MAC安装魔兽争霸3后自己的电脑无法连入局域网的解决方法
js的toLowerCase方法用法实例
angularjs学习笔记之简单介绍
详解java中&和&&的区别
android中TabHost的图标(48×48)和文字叠加解决方法
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
jQuery实现的漂亮表单效果代码
有关opacity或RGBA设置颜色值及元素的透明值
php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy相关推荐
- java super实例_java Super 用法详解及实例代码
java Super 用法详解及实例代码 发布于 2021-1-8| 复制链接 摘记: java Super 用法详解 1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建 ...
- java list用法_Java List 用法详解及实例分析
Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...
- C++中const关键字用法详解及实例和源码下载(一)
最近在学习C++基础部分,看了两天书,已经看过了一遍,半知半解,回过头来重新看第二遍,深入了解一下C++的基础知识.现在读到了const关键字的用法,书上面讲解的时候并没有给出完整的实例,只是理论的讲 ...
- 数据库操作 linq php,.NET_asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析,本文实例讲述了asp.net使用LINQ t - phpStudy...
asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析 本文实例讲述了asp.net使用LINQ to SQL连接数据库及SQL操作语句用法.分享给大家供大家参考,具体如下: LI ...
- C与C++中的常用符号与标点用法详解及实例
C与C++中的常用符号与标点符号有:"+"."-"."*". "/"."%"."& ...
- mmap函数的用法详解及实例分析
1.mmap函数是一个比较神奇的函数,它可以把文件映射到进程的虚拟内存空间.通过对这段内存的读取和修改,可以实现对文件的读取和修改,而不需要用read和write函数.如下图所示,为mmap实现原理的 ...
- C语言const用法详解(带实例)
const与define区别 在C语言中const常用来定义常量,表示这个常量是不可以被修改的.define宏定义也可以用来表示一个常量.那么他们有那些区别呢! 1.预编译指令只是对值进行简单的替换, ...
- java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解
Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...
- android搜索功能xml,Android_Android ActionBar搜索功能用法详解,本文实例讲述了Android ActionBar - phpStudy...
Android ActionBar搜索功能用法详解 本文实例讲述了Android ActionBar搜索功能用法.分享给大家供大家参考,具体如下: 使用ActionBar SearchView时的注意 ...
最新文章
- matlab 图像操作函数的详解
- 010_AOPXml方式开发
- Cocos2d-x 在缓存创建图片
- sqlserver 查询中文查询不到 查询英文可以查到_估值数据和财报数据查询方法
- 【自定义组件】如何引用自定义组件
- 输出26个英文字母c语言,菜鸟求助,写一个随机输出26个英文字母的程序
- easyui 控制某列显示不显示_baogaiMCU控制OLED显示屏
- bug君你好啊之访问servlet时出现此程序可以连接到 Web 服务器,但是因为地址问题无法找到该网页。
- 《支付宝的高可用与容灾架构演进》读后感
- eclipse 类文件编辑器找不到源的问题
- layui JS 中文乱码解决办法
- S3C2440裸机------异常与中断__按键中断程序示例
- 现代大学英语精读第二版(第六册)学习笔记(原文及全文翻译)——3 - What Is News?(新闻是什么?)
- 外汇兑换人民币业务的居民
- Shapely的安装
- java -cp 与 java -Djava.ext.dirs的区别与坑
- 中南大学转专业计算机名单,中南大学2010级优秀本科生转专业名单
- 用HTML实现计数器功能
- 毕业三年,我从鉴黄师转行到阿里做前端
- JDK JRE JVM三者之间的关系,以及JDK JRE包含的结构是什么?
热门文章
- Cell子刊:特异靶向病原菌致病力的植物天然产物的作用机制
- NAR:宏基因组网络分析工具MetagenoNets
- 国内网络环境优化qiime2安装过程-QIIME 2安装慢或无法下载的解决方案
- python使用matplotlib可视化余弦曲线cosine、使用plot函数可视化余弦曲线
- R语言ggplot2可视化使图形的背景在不同区域有不同的颜色实战
- ERROR while rich displaying an object: Error: Continuous value supplied to discrete scale
- R语言aggregate函数数据聚合实战
- DESeq2包分析差异表达基因
- 怎么点亮段码屏_手机被人偷了,支付宝里的钱被转走了,遇到这种情况该怎么办?...
- Mind the Gap: Upgrading Genomes with Pacific Biosciences RS Long-Read Sequencing Technology