4 フォロワー

テーマ

テーマとは、元のビューのレンダリングコードに触れる必要なく、一連のビューを別のビューに置き換える方法です。テーマを使用すると、アプリケーションの外観を体系的に変更できます。

テーマを使用するには、viewアプリケーションコンポーネントのthemeプロパティを設定する必要があります。このプロパティは、ビューファイルの置き換え方法を管理するyii\base\Themeオブジェクトを構成します。yii\base\Themeの次のプロパティを主に指定する必要があります。

  • yii\base\Theme::$basePath: テーマリソース (CSS, JS, 画像など) を含むベースディレクトリを指定します。
  • yii\base\Theme::$baseUrl: テーマリソースのベース URL を指定します。
  • yii\base\Theme::$pathMap: ビューファイルの置き換えルールを指定します。詳細については、以下のサブセクションで説明します。

たとえば、SiteController$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',
                ],
            ],
        ],
    ],
];

情報: パスエイリアスはテーマでサポートされています。ビューの置き換えを行うとき、パスエイリアスは実際のファイルパスまたは URL に変換されます。

yii\base\Theme オブジェクトには、yii\base\View::$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 プロパティは、ビューファイルがどのように置き換えられるかを制御します。このプロパティは、キーと値のペアの配列を受け取り、キーは置き換えられる元のビューパス、値は対応するテーマ付きビューパスです。置換は部分一致に基づいて行われます。ビューパスがpathMap配列のキーのいずれかで始まる場合、その一致する部分が対応する配列の値に置き換えられます。上記の構成例を使用すると、@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/views/index.php にテーマ設定することができます。

テーマの継承

アプリケーションの基本的なルックアンドフィールを含む基本テーマを定義し、現在の休日などに応じてルックアンドフィールを少し変更したい場合があります。テーマの継承を使用することで、これを実現できます。テーマの継承は、単一のビューパスを複数のターゲットにマッピングすることによって行われます。例えば:

'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のいずれかとしてテーマ設定されます。テーマ設定されたファイルが両方存在する場合、最初のものが優先されます。実際には、ほとんどのテーマ付きビューファイルを@app/themes/basicに保持し、それらの一部を@app/themes/christmasでカスタマイズします。

タイプミスを見つけたり、このページの改善が必要だと思った場合は?
githubで編集する !