CurrentTheme


CurrentTheme является статическим классом для работы с активной темой сайта. Он автоматически доступен в файлах темы.

Поддерживает

  • получение данных активной темы
  • получение публичного и файлового пути темы
  • безопасный поиск файлов и каталогов внутри темы
  • формирование URL ресурсов с версией темы
  • получение файлов шаблонов и вложенных общих частей
  • автоматическое подключение CSS и JavaScript
  • получение значений настроек темы

Быстрый старт

php
<?php include CurrentTheme::header(); ?>

<img src="<?php echo CurrentTheme::assetUrl('images', 'logo.svg'); ?>" alt="Логотип">

<?php include CurrentTheme::footer(); ?>

Для получения настройки темы используйте data():

php
$logo = CurrentTheme::data('logo');

if ($logo !== '') {
    echo '<img src="' . $logo . '" alt="Логотип">';
}

Данные темы

directory(): string

Возвращает название папки активной темы.

php
$directory = CurrentTheme::directory();

Пример результата:

text
cmswebsource

name(): string

Возвращает название темы из theme-info.json.

php
$name = CurrentTheme::name();

data(string $key, mixed $default = ''): mixed

Возвращает значение настройки активной темы.

php
$logo = CurrentTheme::data('logo');
$legal = CurrentTheme::data('legal');

Если ключ отсутствует, возвращается значение второго параметра:

php
$phone = CurrentTheme::data('phone', 'Телефон не указан');

Значения формируются из настроек темы и значений, сохранённых для активной темы в базе данных.

Пути темы

path(): string

Возвращает абсолютный путь к папке активной темы в файловой системе.

php
$themePath = CurrentTheme::path();

Используйте path() только когда нужен путь к самой папке темы. Для поиска вложенных файлов безопаснее применять filePath() или directoryPath().

url(): string

Возвращает публичный URL папки активной темы с завершающим /.

php
$themeUrl = CurrentTheme::url();

Пример результата:

text
/resource/themes/cmswebsource/

Файлы и каталоги

directoryPath(string ...$segments): string

Возвращает абсолютный путь к существующему читаемому каталогу внутри активной темы.

Каждую часть пути передавайте отдельным аргументом:

php
$docsPath = CurrentTheme::directoryPath(
    'docs',
    'ru',
    'api',
    'classes'
);

Если каталог не существует, недоступен для чтения или находится за пределами темы, метод возвращает пустую строку.

filePath(string ...$segments): string

Возвращает абсолютный путь к существующему читаемому файлу внутри активной темы.

php
$file = CurrentTheme::filePath(
    'includes',
    'sidebar.php'
);

if ($file !== '') {
    include $file;
}

Если файл не найден или находится за пределами темы, метод возвращает пустую строку.

hasFile(string ...$segments): bool

Проверяет наличие доступного файла внутри активной темы.

php
if (CurrentTheme::hasFile('template', '404.php')) {
    // Файл существует и доступен для чтения.
}

templatePath(string $template, ?string $type = null): string

Возвращает путь к файлу шаблона.

Для общего шаблона:

php
$template = CurrentTheme::templatePath('404');

Будет проверен файл:

text
template/404.php

Для шаблона страницы или записи передайте тип:

php
$pageTemplate = CurrentTheme::templatePath('developer', 'page');
$postTemplate = CurrentTheme::templatePath('news', 'post');

Поддерживаемые типы:

  • page
  • post

Если имя шаблона содержит недопустимые символы, тип не поддерживается или файл отсутствует, метод возвращает пустую строку.

Общие части шаблона

part(string ...$segments): string

Возвращает путь к PHP-файлу внутри папки includes.

Для файла в корне папки передайте его имя без расширения:

php
$sidebar = CurrentTheme::part('sidebar');

Будет проверен файл:

text
includes/sidebar.php

Для вложенного файла передавайте каждую часть пути отдельным аргументом:

php
$navigation = CurrentTheme::part(
    'navigation',
    'sidebar'
);

Будет проверен файл:

text
includes/navigation/sidebar.php

Расширение .php автоматически добавляется к последнему сегменту. Если аргументы не переданы, содержат недопустимые символы или файл отсутствует, метод возвращает пустую строку.

header(): string

Возвращает путь к файлу includes/header.php.

php
include CurrentTheme::header();

footer(): string

Возвращает путь к файлу includes/footer.php.

php
include CurrentTheme::footer();

Ресурсы темы

assetUrl(string ...$segments): string

Возвращает публичный URL существующего файла внутри папки assets.

php
$logoUrl = CurrentTheme::assetUrl(
    'images',
    'logo.svg'
);

Пример результата:

text
/resource/themes/cmswebsource/assets/images/logo.svg?v=0.1.0

К URL автоматически добавляется версия темы из theme-info.json.

Если файл отсутствует, метод возвращает пустую строку.

Не добавляйте assets в аргументы: метод подставляет эту папку самостоятельно.

Подключение CSS

getCSS(): string

Возвращает HTML-теги <link> для стилей активной темы.

Метод не выводит результат самостоятельно:

php
echo CurrentTheme::getCSS();

Автоматически подключаются существующие файлы:

  • assets/css/style.css
  • assets/css/index.css для главной страницы
  • assets/css/{template}.css для текущего шаблона
  • дополнительные CSS-файлы, привязанные к текущему шаблону

Дополнительный файл должен начинаться с ! и содержать имя шаблона между !.

Например, для шаблона developer будет подключён файл:

text
assets/css/!developer!print.css

Отсутствующие файлы пропускаются.

Подключение JavaScript

getJS(?array $modules = null): string

Возвращает HTML-теги <script> для JavaScript активной темы и данные окружения для браузера.

Метод не выводит результат самостоятельно:

php
echo CurrentTheme::getJS();

Автоматически подключаются существующие файлы:

  • assets/js/script.js
  • assets/js/modules/script.js
  • assets/js/{template}.js
  • assets/js/modules/{template}.js
  • дополнительные JavaScript-файлы, привязанные к текущему шаблону

Для подключения JavaScript-модулей ядра передайте их названия массивом:

php
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-модуле:

js
const moduleUrl = `${window.wsSite.coreUrl}/modules/example/assets/js/example.js`;

console.log(window.wsSite.page.template);

Состояние темы

isValid(): bool

Возвращает true, если активная тема прошла проверку.

php
if (!CurrentTheme::isValid()) {
    return;
}

При проверке учитываются папка темы, theme-info.json и основной файл index.php.

status(): string

Возвращает строковый статус проверки активной темы.

php
$status = CurrentTheme::status();

Для корректной темы метод возвращает:

text
valid

Другие значения описывают причину, по которой тема не прошла проверку.

Важные замечания

  • используйте assetUrl() для URL файлов из папки assets
  • используйте filePath() и directoryPath() для безопасной работы с файлами
  • getCSS() и getJS() возвращают HTML строкой и требуют echo
  • header(), footer(), part() и templatePath() возвращают файловые пути
  • методы поиска файлов возвращают пустую строку, если путь недоступен
  • data() не изменяет настройки темы и используется только для их чтения