Темизация - это способ заменить набор представлений другим без необходимости касаться исходного кода визуализации представления. Вы можете использовать тематику для систематического изменения внешнего вида приложения.
Чтобы использовать theming
, вы должны настроить свойство theme
компонента приложения 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',
],
],
],
],
];
Вы можете получить доступ к объекту 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',
],
]
В этом случае view @app/views/site/index.php
будет тематизироваться как @app/themes/christmas/site/index.php
или @app/themes/basic/site/index.php
, в зависимости от того, какой существует тематический файл. Если существуют оба тематических файла, первый будет иметь приоритет. На практике вы сохранили большинство тематических файлов в @app/themes/basic
и настроили некоторые из них в @app/themes/christmas
.
0 комментариев