- 主題添加
默認全局主題在配置文件中添加comment配置
'view' => [
'theme' => [
'basePath' => '@app/themes/{themesName}',
'baseUrl' => '@web',
'pathMap' => [
'@app/views' => '@app/themes/{themesName}',
],
],
]
- 多模塊定義主題
如果有多個不同的模塊,想要在不同的模塊中設置不同的模板,在模塊的入口文件中添加
\Yii::$app->view->theme = new \yii\base\Theme([
'pathMap' => ['@app/views' => '@app/admin/views'],
'baseUrl' => '@web',
]);
文件機制
YII2中主題layout文件機制,如果定義了重新定義了@app/views,則在該目錄下搜索layout文件夾中的布局文件,如果沒有,則在默認文件中尋找。其他頁面的view文件也是如此。注意
如果你跟我一樣,將themes文件放置在app根目錄內,而網站更目錄是@app/web,那么還需要對主題的靜態文件做稍微修改。
YII2中,web可以訪問的目錄是限制在@web目錄下。所以以上情況需要將主題的靜態文件使用Assets發布。
比如主題的路徑@app/themes/tfviolet,在該目錄下(該目錄下其他目錄內也可以)建立一個ThemeAsset文件
namespace app\themes\tfviolet;
use yii\web\AssetBundle;
class ThemeAsset extends AssetBundle
{
public $sourcePath = '@app/themes/tfviolet/static';
public $css = [
'css/materialize.min.css',
'css/style.css'
];
public $js = [
'js/materialize.min.js'
];
}
注意,一定要定義sourcePath,只有這樣才能將sourcePath的所有文件發布到asset目錄下。發布的目錄是@basthPath/asset
定義sourcePath之后,該Assets的baseUrl, basePath則是無效的,被AssetManage覆蓋。