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相关推荐

  1. java super实例_java Super 用法详解及实例代码

    java Super 用法详解及实例代码 发布于 2021-1-8| 复制链接 摘记: java  Super 用法详解 1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建 ...

  2. java list用法_Java List 用法详解及实例分析

    Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...

  3. C++中const关键字用法详解及实例和源码下载(一)

    最近在学习C++基础部分,看了两天书,已经看过了一遍,半知半解,回过头来重新看第二遍,深入了解一下C++的基础知识.现在读到了const关键字的用法,书上面讲解的时候并没有给出完整的实例,只是理论的讲 ...

  4. 数据库操作 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 ...

  5. C与C++中的常用符号与标点用法详解及实例

    C与C++中的常用符号与标点符号有:"+"."-"."*". "/"."%"."& ...

  6. mmap函数的用法详解及实例分析

    1.mmap函数是一个比较神奇的函数,它可以把文件映射到进程的虚拟内存空间.通过对这段内存的读取和修改,可以实现对文件的读取和修改,而不需要用read和write函数.如下图所示,为mmap实现原理的 ...

  7. C语言const用法详解(带实例)

    const与define区别 在C语言中const常用来定义常量,表示这个常量是不可以被修改的.define宏定义也可以用来表示一个常量.那么他们有那些区别呢! 1.预编译指令只是对值进行简单的替换, ...

  8. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  9. android搜索功能xml,Android_Android ActionBar搜索功能用法详解,本文实例讲述了Android ActionBar - phpStudy...

    Android ActionBar搜索功能用法详解 本文实例讲述了Android ActionBar搜索功能用法.分享给大家供大家参考,具体如下: 使用ActionBar SearchView时的注意 ...

最新文章

  1. matlab 图像操作函数的详解
  2. 010_AOPXml方式开发
  3. Cocos2d-x 在缓存创建图片
  4. sqlserver 查询中文查询不到 查询英文可以查到_估值数据和财报数据查询方法
  5. 【自定义组件】如何引用自定义组件
  6. 输出26个英文字母c语言,菜鸟求助,写一个随机输出26个英文字母的程序
  7. easyui 控制某列显示不显示_baogaiMCU控制OLED显示屏
  8. bug君你好啊之访问servlet时出现此程序可以连接到 Web 服务器,但是因为地址问题无法找到该网页。
  9. 《支付宝的高可用与容灾架构演进》读后感
  10. eclipse 类文件编辑器找不到源的问题
  11. layui JS 中文乱码解决办法
  12. S3C2440裸机------异常与中断__按键中断程序示例
  13. 现代大学英语精读第二版(第六册)学习笔记(原文及全文翻译)——3 - What Is News?(新闻是什么?)
  14. 外汇兑换人民币业务的居民
  15. Shapely的安装
  16. java -cp 与 java -Djava.ext.dirs的区别与坑
  17. 中南大学转专业计算机名单,中南大学2010级优秀本科生转专业名单
  18. 用HTML实现计数器功能
  19. 毕业三年,我从鉴黄师转行到阿里做前端
  20. JDK JRE JVM三者之间的关系,以及JDK JRE包含的结构是什么?

热门文章

  1. Cell子刊:特异靶向病原菌致病力的植物天然产物的作用机制
  2. NAR:宏基因组网络分析工具MetagenoNets
  3. 国内网络环境优化qiime2安装过程-QIIME 2安装慢或无法下载的解决方案
  4. python使用matplotlib可视化余弦曲线cosine、使用plot函数可视化余弦曲线
  5. R语言ggplot2可视化使图形的背景在不同区域有不同的颜色实战
  6. ERROR while rich displaying an object: Error: Continuous value supplied to discrete scale
  7. R语言aggregate函数数据聚合实战
  8. DESeq2包分析差异表达基因
  9. 怎么点亮段码屏_手机被人偷了,支付宝里的钱被转走了,遇到这种情况该怎么办?...
  10. Mind the Gap: Upgrading Genomes with Pacific Biosciences RS Long-Read Sequencing Technology