CurrentTheme
CurrentTheme является статическим классом для работы с активной темой сайта. Он автоматически доступен в файлах темы.Поддерживает
- получение данных активной темы
- получение публичного и файлового пути темы
- безопасный поиск файлов и каталогов внутри темы
- формирование URL ресурсов с версией темы
- получение файлов шаблонов и вложенных общих частей
- автоматическое подключение CSS и JavaScript
- получение значений настроек темы
Быстрый старт
<?php include CurrentTheme::header(); ?>
<img src="<?php echo CurrentTheme::assetUrl('images', 'logo.svg'); ?>" alt="Логотип">
<?php include CurrentTheme::footer(); ?>Для получения настройки темы используйте data():
$logo = CurrentTheme::data('logo');
if ($logo !== '') {
echo '<img src="' . $logo . '" alt="Логотип">';
}Данные темы
directory(): string
Возвращает название папки активной темы.
$directory = CurrentTheme::directory();Пример результата:
cmswebsourcename(): string
Возвращает название темы из theme-info.json.
$name = CurrentTheme::name();data(string $key, mixed $default = ''): mixed
Возвращает значение настройки активной темы.
$logo = CurrentTheme::data('logo');
$legal = CurrentTheme::data('legal');Если ключ отсутствует, возвращается значение второго параметра:
$phone = CurrentTheme::data('phone', 'Телефон не указан');Значения формируются из настроек темы и значений, сохранённых для активной темы в базе данных.
Пути темы
path(): string
Возвращает абсолютный путь к папке активной темы в файловой системе.
$themePath = CurrentTheme::path();Используйте path() только когда нужен путь к самой папке темы. Для поиска вложенных файлов безопаснее применять filePath() или directoryPath().
url(): string
Возвращает публичный URL папки активной темы с завершающим /.
$themeUrl = CurrentTheme::url();Пример результата:
/resource/themes/cmswebsource/Файлы и каталоги
directoryPath(string ...$segments): string
Возвращает абсолютный путь к существующему читаемому каталогу внутри активной темы.
Каждую часть пути передавайте отдельным аргументом:
$docsPath = CurrentTheme::directoryPath(
'docs',
'ru',
'api',
'classes'
);Если каталог не существует, недоступен для чтения или находится за пределами темы, метод возвращает пустую строку.
filePath(string ...$segments): string
Возвращает абсолютный путь к существующему читаемому файлу внутри активной темы.
$file = CurrentTheme::filePath(
'includes',
'sidebar.php'
);
if ($file !== '') {
include $file;
}Если файл не найден или находится за пределами темы, метод возвращает пустую строку.
hasFile(string ...$segments): bool
Проверяет наличие доступного файла внутри активной темы.
if (CurrentTheme::hasFile('template', '404.php')) {
// Файл существует и доступен для чтения.
}templatePath(string $template, ?string $type = null): string
Возвращает путь к файлу шаблона.
Для общего шаблона:
$template = CurrentTheme::templatePath('404');Будет проверен файл:
template/404.phpДля шаблона страницы или записи передайте тип:
$pageTemplate = CurrentTheme::templatePath('developer', 'page');
$postTemplate = CurrentTheme::templatePath('news', 'post');Поддерживаемые типы:
pagepost
Если имя шаблона содержит недопустимые символы, тип не поддерживается или файл отсутствует, метод возвращает пустую строку.
Общие части шаблона
part(string ...$segments): string
Возвращает путь к PHP-файлу внутри папки includes.
Для файла в корне папки передайте его имя без расширения:
$sidebar = CurrentTheme::part('sidebar');Будет проверен файл:
includes/sidebar.phpДля вложенного файла передавайте каждую часть пути отдельным аргументом:
$navigation = CurrentTheme::part(
'navigation',
'sidebar'
);Будет проверен файл:
includes/navigation/sidebar.phpРасширение .php автоматически добавляется к последнему сегменту. Если аргументы не переданы, содержат недопустимые символы или файл отсутствует, метод возвращает пустую строку.
header(): string
Возвращает путь к файлу includes/header.php.
include CurrentTheme::header();footer(): string
Возвращает путь к файлу includes/footer.php.
include CurrentTheme::footer();Ресурсы темы
assetUrl(string ...$segments): string
Возвращает публичный URL существующего файла внутри папки assets.
$logoUrl = CurrentTheme::assetUrl(
'images',
'logo.svg'
);Пример результата:
/resource/themes/cmswebsource/assets/images/logo.svg?v=0.1.0К URL автоматически добавляется версия темы из theme-info.json.
Если файл отсутствует, метод возвращает пустую строку.
Не добавляйте assets в аргументы: метод подставляет эту папку самостоятельно.
Подключение CSS
getCSS(): string
Возвращает HTML-теги <link> для стилей активной темы.
Метод не выводит результат самостоятельно:
echo CurrentTheme::getCSS();Автоматически подключаются существующие файлы:
assets/css/style.cssassets/css/index.cssдля главной страницыassets/css/{template}.cssдля текущего шаблона- дополнительные CSS-файлы, привязанные к текущему шаблону
Дополнительный файл должен начинаться с ! и содержать имя шаблона между !.
Например, для шаблона developer будет подключён файл:
assets/css/!developer!print.cssОтсутствующие файлы пропускаются.
Подключение JavaScript
getJS(?array $modules = null): string
Возвращает HTML-теги <script> для JavaScript активной темы и данные окружения для браузера.
Метод не выводит результат самостоятельно:
echo CurrentTheme::getJS();Автоматически подключаются существующие файлы:
assets/js/script.jsassets/js/modules/script.jsassets/js/{template}.jsassets/js/modules/{template}.js- дополнительные JavaScript-файлы, привязанные к текущему шаблону
Для подключения JavaScript-модулей ядра передайте их названия массивом:
echo CurrentTheme::getJS([
'gallery',
'editor',
]);Название модуля должно содержать только латинские буквы, цифры, _ или -. Несуществующие модули пропускаются.
Данные JavaScript
getJS() создаёт неизменяемый объект window.wsSite.
Он содержит:
| Свойство | Описание |
|---|---|
siteUrl |
Публичный адрес сайта. |
currentUrl |
URL текущего запроса. |
coreUrl |
Публичный URL ядра CMS. |
themeUrl |
Публичный URL активной темы. |
themeAssetsUrl |
Публичный URL папки assets. |
lang |
Текущий язык страницы. |
page.type |
Тип текущей страницы. |
page.template |
Название текущего шаблона. |
page.url |
Полный URL текущей страницы. |
page.postType |
Тип текущей записи. |
Пример использования в ES-модуле:
const moduleUrl = `${window.wsSite.coreUrl}/modules/example/assets/js/example.js`;
console.log(window.wsSite.page.template);Состояние темы
isValid(): bool
Возвращает true, если активная тема прошла проверку.
if (!CurrentTheme::isValid()) {
return;
}При проверке учитываются папка темы, theme-info.json и основной файл index.php.
status(): string
Возвращает строковый статус проверки активной темы.
$status = CurrentTheme::status();Для корректной темы метод возвращает:
validДругие значения описывают причину, по которой тема не прошла проверку.
Важные замечания
- используйте
assetUrl()для URL файлов из папкиassets - используйте
filePath()иdirectoryPath()для безопасной работы с файлами getCSS()иgetJS()возвращают HTML строкой и требуютechoheader(),footer(),part()иtemplatePath()возвращают файловые пути- методы поиска файлов возвращают пустую строку, если путь недоступен
data()не изменяет настройки темы и используется только для их чтения