環境
基于《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語句