テーマとは、元のビューのレンダリングコードに触れる必要なく、一連のビューを別のビューに置き換える方法です。テーマを使用すると、アプリケーションの外観を体系的に変更できます。
テーマを使用するには、view
アプリケーションコンポーネントのthemeプロパティを設定する必要があります。このプロパティは、ビューファイルの置き換え方法を管理するyii\base\Themeオブジェクトを構成します。yii\base\Themeの次のプロパティを主に指定する必要があります。
たとえば、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で編集する !
コメントするには、サインアップまたはログインしてください。