Тематизация
Тематизация — это способ заменить набор представлений другим без необходимости изменения исходного кода рендеринга представлений. Вы можете использовать тематизацию для систематического изменения внешнего вида приложения.
Для использования тематизации необходимо настроить свойство темы компонента приложения view. Это свойство настраивает объект yii\base\Theme, который управляет заменой файлов представлений. В основном вам нужно указать следующие свойства объекта yii\base\Theme:
- yii\base\Theme::$basePath: указывает базовый каталог, содержащий тематические ресурсы (CSS, JS, изображения и т. д.).
- yii\base\Theme::$baseUrl: указывает базовый URL тематических ресурсов.
- yii\base\Theme::$pathMap: указывает правила замены файлов представлений. Более подробная информация будет предоставлена в следующих подразделах.
Например, если вы вызываете $this->render('about') в SiteController, будет рендериться файл представления @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/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.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/guide-output-theming.html