Yii 2 테마(Theme)용법 상세 설명
우선 주요 설정 방식 을 보십시오.
'components' => [
'view' => [
'theme' => [
'pathMap' => ['@app/views' => '@app/themes/basic'],
'baseUrl' => '@web/themes/basic',
],
],
],
Yii 의 테마 기능 은 주로 yii\base\Theme 류 에서 이 루어 집 니 다.주요 사상 은 일일이 대응 하 는 문자열 맵 배열 을 정의 한 다음 에 주어진 문자열 을 배열 의 맵 관계 에 따라 문자열 로 바 꾸 는 것 입 니 다.다음 맵 이 있 습 니 다:
$pathMap=[
'@app/a' => '@app/aaa',
'@app/b' => '@app/bbb',
'@app/c' => [
'@app/ccc/xxx',
'@app/ccc/yyy',
],
];
문자열@app/a/site/index.php 에 대해 위의 매 핑 관 계 를 통 해 알 수 있 듯 이@app/a 를@app/aa 로 바 꾸 고 생 성 결 과 는@app/aa/site/index.php 입 니 다.그러나 이것 은 아직 최종 결과 가 아니 라 는 점 을 주의해 야 한다.Yii 에 서 는 파일 경로 에 대한 동작 이기 때문에@app/aa/site/index.php 파일 이 존재 하면 이 경 로 를 되 돌려 줍 니 다.그렇지 않 으 면 원래 경 로 를 되 돌려 줍 니 다:@app/a/site/index.php
문자열@app/c/site/index.php 가 있 으 면 위의 맵 이@app/c 에 대응 하 는 2 개의 교체 항목 을 알 고 있 기 때문에 Yii 는 예전 부터 순서대로 교 체 됩 니 다.@app/ccc/xxx/site/index.phop 이 되 고 이 파일 이 존재 하면 이 경 로 를 되 돌려 줍 니 다.그렇지 않 으 면 계속 교체 합 니 다.
모든 교체 결과 에 해당 하 는 파일 이 존재 하지 않 는 다 면 마지막 으로 원래 경로 로 돌아 갑 니 다.
동시에 여러 개의 교체 목표 치 를 쓰 는 것 은 이러한 장점 이 있다.주제 의 계승 을 실현 하 는 것 이다.
현재 기본 테마 default 이 있 습 니 다.검은색 테 마 를 추가 하려 면 두 가지 방법 이 있 습 니 다.
첫 번 째:모든 default 의 보 기 를 Blank 디 렉 터 리 에 복사 합 니 다.
두 번 째:layot 레이아웃 파일 을 Blank 디 렉 터 리 에 복사 한 다음 레이아웃 파일 에서 전체 색상 을 수정 합 니 다.그리고
$pathMap=[
'@app/c' => [
'@app/ccc/blank',
'@app/ccc/default',
],
];
좋 은 점 보 셨 죠?Blank 에서 파일 을 찾 지 못 하면 default 에서 찾 습 니 다.즉,Blank 에 있 는 파일 은 default 에 존재 하 는 파일 을 덮어 쓰 고 테마 계승 을 실현 합 니 다.테마 속성:
$pathMap:이것 은 맵 관 계 를 바 꾸 는 것 을 설정 하 는 데 사 용 됩 니 다.
'pathMap' =>[
'@app/views' => [
'@app/themes/blank',
'@app/themes/default',
],
'@app/modules' => '@app/themes/default/modules',
'@app/widgets' => '@app/themes/default/widgets'
],
이 세 가 지 는 views,modules,widgets 에 대한 테마 입 니 다.$baseUrl:접근 할 자원 을 설정 하 는 url(끝 에"/"를 추가 하지 않 음)
$basePath:자원 이 있 는 파일 디 렉 터 리 설정
주제 의 방법:
public function init()
public function init()
{
parent::init();
// $pathMap , $basePath,
if (empty($this->pathMap)) {
/*
* $basePath , 。
* $pathMap $basePath , , $pathMap
*/
if (($basePath = $this->getBasePath()) === null) {
throw new InvalidConfigException('The "basePath" property must be set.');
}
// $basePath
$this->pathMap = [Yii::$app->getBasePath() => [$basePath]];
}
}
public function applyTo($path)
// $pathMap $path
public function applyTo($path)
{
// "/"、“\”
$path = FileHelper::normalizePath($path);
foreach ($this->pathMap as $from => $tos) {
// ( )
$from = FileHelper::normalizePath(Yii::getAlias($from)) . DIRECTORY_SEPARATOR;
// $path
if (strpos($path, $from) === 0) {
$n = strlen($from);
// ,
foreach ((array) $tos as $to) {
$to = FileHelper::normalizePath(Yii::getAlias($to)) . DIRECTORY_SEPARATOR;
// $path $from $to
$file = $to . substr($path, $n);
// ,
if (is_file($file)) {
return $file;
}
}
}
}
return $path;
}
Yii 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 고 는 Yii 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
여러 Raspberry Pi 간에 메시지 연동현재 우리 집에는 여러 대의 Raspberry Pi (Pi Zero w, wh)가 있으며, node-red-dashboard를 이용하여 WiFi 접속한 스마트폰에서 브라우저를 통해 조작하고 있습니다. dashboar...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.