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