Yii 2 테마(Theme)용법 상세 설명

4338 단어 Yii2메시지Theme
본 논문 의 사례 는 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기