Создание темы
В этом руководстве создадим минимальную рабочую тему и подключим её через административную панель.
Структура темы
Темы хранятся в папке:
resource/themesСоздайте отдельную папку темы:
resource/themes/exampleРекомендуемая начальная структура:
example/
assets/
css/
style.css
js/
script.js
includes/
header.php
footer.php
template/
page/
default.php
post/
404.php
index.php
theme-info.jsonДля распознавания темы обязательны только:
theme-info.jsonindex.php
Остальные файлы добавляются в зависимости от устройства сайта.
Название папки может содержать латинские буквы, цифры, _ и -.
Описание темы
Создайте файл theme-info.json в корне темы:
{
"theme-name": "Example",
"theme-author": "Author",
"theme-version": "1.0.0"
}Все три поля обязательны:
| Поле | Описание |
|---|---|
theme-name |
Отображаемое название темы. |
theme-author |
Автор темы. |
theme-version |
Версия темы. |
Версия добавляется к URL ресурсов темы и помогает браузеру обновлять CSS, JavaScript и изображения после изменения файлов.
Общий header
Создайте файл includes/header.php:
<!DOCTYPE html>
<html lang="<?php echo CurrentLanguage::htmlLang(); ?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php
echo PageData::getSeoHead();
echo PageData::getFaviconHead();
echo CurrentTheme::getCSS();
?>
</head>
<body>
<header>
<a href="<?php echo CurrentLanguage::url('/'); ?>">Главная</a>
</header>CurrentTheme::getCSS() автоматически сформирует подключения существующих файлов стилей темы.
Общий footer
Создайте файл includes/footer.php:
<footer>
<p>Example</p>
</footer>
<?php echo CurrentTheme::getJS(); ?>
</body>
</html>CurrentTheme::getJS() подключает JavaScript темы и создаёт объект window.wsSite с данными текущей страницы и окружения сайта.
Главная страница
Корневой файл index.php используется для главной страницы сайта:
<?php include CurrentTheme::header(); ?>
<main>
<h1><?php echo PageData::getTitle(); ?></h1>
<div><?php echo PageData::getContent(); ?></div>
</main>
<?php include CurrentTheme::footer(); ?>CMS самостоятельно выбирает этот файл для главной страницы.
Шаблон обычной страницы
Создайте файл template/page/default.php:
<?php include CurrentTheme::header(); ?>
<main>
<h1><?php echo PageData::getTitle(); ?></h1>
<div><?php echo PageData::getContent(); ?></div>
</main>
<?php include CurrentTheme::footer(); ?>После активации темы шаблон default появится в списке шаблонов страницы в административной панели.
Имя файла становится именем шаблона:
template/page/default.php -> defaultШаблоны записей
Шаблоны записей хранятся отдельно:
template/post/{template}.phpНапример:
template/post/news.phpТакой файл можно назначить типу записей через административную панель.
Внутри шаблона доступны данные текущей записи:
<?php include CurrentTheme::header(); ?>
<main>
<article>
<h1><?php echo PageData::getTitle(); ?></h1>
<div><?php echo PageData::getContent(); ?></div>
</article>
</main>
<?php include CurrentTheme::footer(); ?>Страница ошибки
Для собственной страницы ошибки создайте template/404.php:
<?php include CurrentTheme::header(); ?>
<main>
<h1>404</h1>
<p>Страница не найдена.</p>
</main>
<?php include CurrentTheme::footer(); ?>Если файл отсутствует, CMS использует системную страницу ошибки.
Стили
Основные стили разместите в файле:
assets/css/style.cssОн автоматически подключается при вызове:
echo CurrentTheme::getCSS();Дополнительно CMS подключает файл, совпадающий с текущим шаблоном:
assets/css/index.css
assets/css/default.css
assets/css/news.cssindex.css используется на главной странице, остальные файлы подключаются для соответствующих шаблонов.
Отсутствующие файлы просто пропускаются.
JavaScript
Основной JavaScript разместите в файле:
assets/js/script.jsОн автоматически подключается при вызове:
echo CurrentTheme::getJS();Для ES-модулей можно использовать:
assets/js/modules/script.jsТакже поддерживаются файлы текущего шаблона:
assets/js/default.js
assets/js/modules/default.jsФайлы из папки modules подключаются с атрибутом type="module".
Изображения и другие ресурсы
Получайте URL ресурсов через CurrentTheme::assetUrl():
$logo = CurrentTheme::assetUrl(
'images',
'logo.svg'
);Использование в HTML:
<img src="<?php echo CurrentTheme::assetUrl('images', 'logo.svg'); ?>" alt="Логотип">Метод проверяет существование файла и добавляет версию темы к URL.
Папку assets передавать не нужно.
Локализация
Переводы темы хранятся в папке lang:
lang/
ru/
common.php
en/
common.phpПример lang/ru/common.php:
<?php
return [
'main' => 'Главная',
'contacts' => 'Контакты',
];Получение перевода:
echo SiteLang::html('main', 'Главная');Для каждого языка используется его URL-префикс.
Настройки темы
Файл theme-settings.json является необязательным.
Если он отсутствует, тема всё равно может быть активирована. Добавляйте его только тогда, когда пользователю действительно нужны изменяемые настройки темы.
Значения настроек доступны через:
$logo = CurrentTheme::data('logo');Настройки темы лучше вынести в отдельное руководство, поскольку их структура зависит от типов полей административной панели.
Активация темы
После создания файлов:
- Откройте раздел тем в административной панели.
- Выберите тему
Example. - Сохраните настройки.
- Откройте главную страницу сайта.
CMS покажет тему в списке только как непосредственную папку внутри resource/themes.
Тема не будет активирована, если:
- отсутствует
theme-info.json - manifest содержит некорректный JSON
- отсутствует одно из обязательных полей manifest
- отсутствует или недоступен
index.php - папка темы находится вне
resource/themes
Проверка результата
После активации проверьте:
- открывается ли главная страница
- выводятся ли header и footer
- подключился ли
assets/css/style.css - подключился ли
assets/js/script.js - появился ли шаблон
defaultпри редактировании страницы - открывается ли страница с назначенным шаблоном
- отображается ли собственная страница
404 - изменяется ли параметр
?v=у ресурсов после обновления версии темы