W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
主題是一種將當前的一套視圖?views?替換為另一套視圖,而無需更改視圖渲染代碼的方法。 你可以使用主題來系統(tǒng)地更改應用的外觀和體驗。
要使用主題,你得配置?view
?應用組件的 yii\base\View::theme 屬性。 這個屬性配置了一個 yii\base\Theme 對象,這個對象用來控制視圖文件怎樣被替換。 你主要應該指明下面的 yii\base\Theme 屬性:
例如,如果你在?SiteController
?里面調(diào)用?$this->render('about')
,那你將渲染視圖文件?@app/views/site/about.php
。 然而,如果你在下面的應用配置中開啟了主題功能,那么@app/themes/basic/site/about.php
?文件將會被渲染。
return [
'components' => [
'view' => [
'theme' => [
'basePath' => '@app/themes/basic',
'baseUrl' => '@web/themes/basic',
'pathMap' => [
'@app/views' => '@app/themes/basic',
],
],
],
],
];
信息:主題支持路徑別名。當我們在做視圖替換的時候, 路徑別名將被轉(zhuǎn)換成實際的文件路徑或者URL。
你可以通過 yii\base\View::theme 屬性訪問 yii\base\Theme 對象。例如,在一個視圖文件里,你可以寫下面的代碼, 因為?$this
?指向視圖對象:
$theme = $this->theme;
// returns: $theme->baseUrl . '/img/logo.gif'
$url = $theme->getUrl('img/logo.gif');
// returns: $theme->basePath . '/img/logo.gif'
$file = $theme->getPath('img/logo.gif');
yii\base\Theme::pathMap 屬性控制如何替換視圖文件。它是一個鍵值對數(shù)組,其中, 鍵是原本的視圖路徑,而值是相應的主題視圖路徑。 替換是基于部分匹配的:如果視圖路徑以 yii\base\Theme::pathMap 數(shù)組的 任何一個鍵為起始,那么匹配部分將被相應的值所替換。 使用上面配置的例子,因為?@app/views/site/about.php
?中的起始部分與鍵?@app/views
?匹配, 它將被替換成@app/themes/basic/site/about.php
。
要主題化模塊,yii\base\Theme::pathMap 可以配置成下面這樣:
'pathMap' => [
'@app/views' => '@app/themes/basic',
'@app/modules' => '@app/themes/basic/modules', // <-- !!!
],
它允許你將?@app/modules/blog/views/comment/index.php
?主題化成@app/themes/basic/modules/blog/views/comment/index.php
。
要主題化小部件,你可以像下面這樣配置 yii\base\Theme::pathMap:
'pathMap' => [
'@app/views' => '@app/themes/basic',
'@app/widgets' => '@app/themes/basic/widgets', // <-- !!!
],
這將允許你將?@app/widgets/currency/views/index.php
?主題化成?@app/themes/basic/widgets/currency/index.php
。
有的時候,你可能想要定義一個基本的主題,其中包含一個基本的應用外觀和體驗,然后根據(jù)當前的節(jié)日,你可能想要稍微地改變一下外觀和體驗。 這個時候,你就可以使用主題繼承實現(xiàn)這一目標,主題繼承是通過一個單視圖路徑去映射多個目標, 例如,
'pathMap' => [
'@app/views' => [
'@app/themes/christmas',
'@app/themes/basic',
],
]
在這種情況下,視圖?@app/views/site/index.php
?將被主題化成?@app/themes/christmas/site/index.php
?或者@app/themes/basic/site/index.php
, 這取決于哪個主題文件存在。假如都存在,那么第一個將被優(yōu)先使用。在現(xiàn)實情況中, 你會將大部分的主題文件放在?@app/themes/basic
?里,而一些自定義的放在?@app/themes/christmas
里。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: