环境
基于《Yii2 之 frontend 子模块实践之一:添加前后台子模块》。
基于《Yii2 之 frontend 子模块实践之二:构建子模块的独立配置》。
▪ 配置子模块的布局
既然启用了 子模块,那么我们就希望每个 子模块 的布局文件直接放到其根目录之下,例如 [Sub Module Path]/views/layouts/,这样就比较利于管理。
在 《Yii2 之 frontend 子模块实践之一:添加前后台子模块》 文章中,我们通过在 子模块 根目录下 Module.php 文件里的 init() 函数中添加 $this->layout = 'main'; 代码来设置每个 子模块 的独立布局文件。
现在请先删除两个 子模块 根目录下 Module.php 文件里的 $this->layout = 'main'; 代码,因为接下来我们将介绍更巧妙更方便的方法设置。
编辑两个 子模块 的 [Sub Module Path]/Config.php 文件,添加如下配置项:
'layout' => '@module/views/layouts/main'
别名 @module 的具体值请参见 《Yii2 之 frontend 子模块实践之二:构建子模块的独立配置》
说明:当 frontend 应用主体 实例化一个子模块时,别名 @module 将被赋值为当前激活的 子模块 根目录路径;当控制器渲染视图时,自然就调用当前 子模块 下的视图文件。
▪ 配置子模块的语言
无论是不是简单的企业网站,还是复杂平台网站;无论是否只有一种语言,还是有多种语言;都建议大家使用语言文件包,也许它会给你的项目开发增加一点点时间,但是其后期带来的可维护性还是非常不错的。
在此之前,还是希望大家先看看官方的 Yii2 国际化 介绍。
1. 语言包目录配置
同 布局 的架构方式一样,我们也希望每个 子模块 的语言包文件直接放到其根目录之下,例如 [Sub Module Path]/languages/,这样就比较利于管理,话不多说,直接编辑两个 子模块 的 [Sub Module Path]/Config.php 文件,添加如下配置项即可:
'components' => [
// ...
'i18n' => [
'translations' => [
'*' => [
'class' => 'yii\i18n\PhpMessageSource',
'basePath' => '@module/languages',
]
]
]
// ...
}
说明:当 frontend 应用主体 实例化一个子模块时,别名 @module 将被赋值为当前激活的 子模块 根目录路径;当控制器渲染视图时,自然就调用当前 子模块 下的视图文件。
2. 默认语言配置
Yii2 默认的语言是 en-US,很多时候它并不符合我们的开发要求,所以我们就要把的默认语言设置为 zh-CN,编辑 /frontend/config/main.php,添加如下配置:
'language' => 'zh-CN'
除了上面直接将语言写到配置文件外,还可以将语言写到每个 子模块 根目录下 Module.php 文件里:
Yii::$app->language = 'zh-CN';
推荐使用第二种方法,将语言配置写到 Module.php 里面,这样就可以利用 Cookie、Get参数等多种方式动态的改变语言,更加灵活
以下就是我常用的语言动态配置代码
// 设置默认语言
$language = Language::getRecord($_GET['l']);
$languages = Language::getRecordsByFilter(array('module'=>'frontend-'.$this->id));
if( !empty($language) ) setcookie('language-frontend-'.$this->id, $language['language_id'], time()+3600*24, '/');
if( $_GET['ll'] ) $language = Language::getRecord($_GET['ll']);
$language = empty($language) ? $_COOKIE['language-frontend-'.$this->id] : $language['language_id'];
$language = $language ? Language::getRecord($language) : $languages[0];
Yii::$app->language = $language['code'];
Yii::$app->params = array_merge(Yii::$app->params, array('language'=>$language,'languages'=>$languages));
这里代码仅仅抛砖引玉,模型 Language 的具体代码也不贴了,大家看看思路即可,具体可以自己写
- Yii2使用Url组件
- Yii2的Html,Request组件详解
- YII2.0框架, 多图片上传功能
- yii2-imagine配置
- 有洁癖的禁止默认YII自带垃圾代码(个人认为)、JS、CSS(新手教程)
- Yii2 API接口输出统一Json和jsonp格式方法
- MySql 创建表的一些语句释义
- Yii2联合查询(配合GridView)
- Yii 通用系统字典
- ArrayHelper的多维数组排序函数multisort,强大无比。
- 路由规则,在Url中替换使用'/'以外的符号连接
- 从excel文件中读取表格内容,并批量写入数据库
- yii2注册时验证用户名、邮箱等唯一性
- Yii2最全的实战教程
- Composer安装yii2-imagine 压缩,剪切,旋转,水印
- LinkPager增加总页数 和总记录数
- Yii2 获取模块名控制器名方法名
- Yii2使用yii2-adminlte+yii2-admin左侧菜单子路径不高亮问题又解
- 前端CSS框架
- Yii2 之 frontend 子模块实践之一:添加前后台子模块
- Yii2 之 frontend 子模块实践之二:构建子模块的独立配置
- Yii2 之 frontend 子模块实践之三:布局和语言配置
- 完美解决ajax验证码不刷新问题,让验证码更加美观,不修改任何源代码
- yii2.0 表单小部件常用的默认选中
- Yii2 controller 传值给layout
- yii2 dropDownList 二级和三级 联动写法
- 微信扫码登录 新窗口二维码 扫完关闭二维码页面 进入登录页面
- yii2 实现 "上一篇,下一篇" 功能
- Yii 行为简单应用
- SQL语句