Разработка
Полное руководство по созданию компонентов, виджетов и расширений для InstantCMS
Обзор архитектуры
MVC-паттерн и структура системы
InstantCMS построена на архитектуре MVC (Model-View-Controller). Основной функционал реализован через компоненты — независимые модули, каждый из которых содержит контроллер, модель и шаблоны. Система поддерживает автозагрузку классов и пространства имён.
Автозагрузка классов
system/core/
Классы ядра системы
system/fields/
Классы полей форм
system/controllers/{name}/
Классы контроллеров
icms\
Пространство имён (Composer)
Цикл обработки запроса
Загрузка ядра и конфигурации
Определение контроллера и действия
Выполнение логики действия
Работа с данными
Рендеринг HTML
Ядро системы
Основные классы в /system/core/
Ядро InstantCMS состоит из набора системных классов, расположенных в директории /system/core/. Каждый класс отвечает за определённую область функциональности и доступен через глобальные объекты или статические методы.
Главный класс системы, точка входа
Базовый класс всех контроллеров
Базовый класс моделей данных
Работа с базой данных (PDO)
Движок шаблонов и рендеринг
Генерация и валидация форм
Обработка HTTP-запросов
Авторизация и данные пользователя
Система кэширования
Управление конфигурацией
Система прав доступа
Менеджер событий и хуков
Базовый класс действий
Базовый класс виджетов
Отправка почтовых сообщений
Базовый класс админ-панели
Инструменты отладки
Контроллеры
Логика обработки запросов
Контроллер — основная единица функционала. Имя контроллера должно быть в нижнем регистре, из латинских букв, минимум 3 символа. Каждый контроллер размещается в собственной директории внутри /system/controllers/.
Структура директории контроллера
/system/controllers/{name}/
├── frontend.php # Фронтенд-контроллер
├── backend.php # Бэкенд-контроллер (админка)
├── model.php # Модель данных
├── hooks.php # Хуки и обработчики событий
├── frontend/
│ └── *.php # Действия фронтенда
├── backend/
│ └── *.php # Действия админ-панели
└── templates/
├── frontend/ # Шаблоны фронтенда
└── backend/ # Шаблоны админки
Составные части
Фронтенд (10 частей)
- Контроллер Основной класс frontend.php
- Действия Файлы в папке frontend/
- Модель Работа с данными model.php
- Хуки Обработчики событий hooks.php
- Шаблоны Файлы отображения
Бэкенд (7 частей)
- Контроллер Класс backend.php
- Действия Файлы в папке backend/
- Формы Файлы форм настроек
- Шаблоны Шаблоны админки
- Языковые файлы Локализация интерфейса
InstantCMS имеет встроенный генератор скелета контроллера, который автоматически создаёт базовую структуру файлов и директорий нового компонента.
Модели
Работа с данными и базой данных
Модели в InstantCMS наследуют класс cmsModel и предоставляют методы для чтения, записи, фильтрации и кэширования данных. Модель каждого компонента расположена в файле model.php директории контроллера.
Основные разделы документации
Чтение записей
Получение данных из базы с фильтрацией, сортировкой и пагинацией
Изменение записей
Создание, обновление и удаление данных в базе
Фильтрация
Построение условий выборки и работа с фильтрами запросов
Транзакции
Атомарные операции с базой данных и откат при ошибках
Подготовка значений
Валидация и форматирование данных перед сохранением
Кэширование
Оптимизация производительности через кэш запросов
Шаблоны
Система отображения и рендеринг HTML
Шаблоны — это наборы файлов, определяющих визуальное представление сайта в браузере. Они генерируют HTML-код и управляются через класс cmsTemplate. Система поддерживает наследование шаблонов, хелперы и схемы позиций.
Разделы документации шаблонов
CSS и JavaScript
Подключение стилей и скриптов, управление ассетами
Наследование шаблонов
Механизм наследования для создания дочерних шаблонов
SEO и мета-теги
Управление заголовками, описаниями и параметрами страниц
Макеты (Layouts)
Организация структуры страниц через макеты
Хелперы
Вспомогательные функции для использования в шаблонах
Опции шаблона
Настраиваемые параметры для кастомизации
Схема позиций
Определение областей для размещения виджетов
Создание шаблона
Практическое руководство по разработке нового шаблона
Разработка виджетов
Создание собственных виджетов
Виджеты бывают двух типов: общие (в /system/widgets/) и виджеты компонентов (в директории контроллера). Класс виджета наследует cmsWidget и реализует метод run() для генерации данных.
Типы виджетов
/system/widgets/{name}/
Независимый виджет, не привязанный к конкретному компоненту. Доступен для всех страниц.
/system/controllers/{ctrl}/widgets/{name}/
Виджет, являющийся частью компонента. Имеет доступ к модели и данным контроллера.
Структура файлов виджета
/system/widgets/{name}/
├── widget.php # Класс виджета (extends cmsWidget)
├── options.form.php # Форма настроек виджета
└── languages/
└── ru/
└── lang.php # Языковые константы
Ключевые методы и свойства
Формы и поля
Система генерации и валидации форм
InstantCMS предоставляет фреймворк для создания форм, работы с полями и динамического изменения готовых форм. Создание собственных полей сводится к созданию определённого класса с заданными свойствами и методами обработки данных.
Встроенные типы полей
Текстовые
Списки выбора
Медиа
Специальные
Вы можете создавать собственные типы полей, наследуя базовый класс поля. Для этого нужен файл класса поля и шаблон для рендеринга формы.
Хранение данных
Сессии, cookies и персональные настройки
InstantCMS предоставляет несколько механизмов для хранения различных данных помимо основной базы данных. Каждый механизм подходит для своих задач.
Сессии
Хранение данных текущего сеанса пользователя на стороне сервера
Cookies
Хранение данных на стороне клиента для запоминания предпочтений
УПН (UPS)
Универсальные персональные настройки пользователей, хранимые в базе данных
Уведомления
Система оповещений пользователей
Система уведомлений позволяет компонентам отправлять оповещения пользователям о различных событиях: новых комментариях, ответах, упоминаниях и других действиях. Уведомления отображаются в реальном времени через интерфейс сайта.
Уведомления внутри сайта, отображаемые в панели пользователя и счётчике непрочитанных
Дублирование оповещений на электронную почту через класс cmsMailer
Интеграция компонентов
Механизмы взаимодействия между модулями
InstantCMS предоставляет набор механизмов для интеграции компонентов друг с другом. Это позволяет расширять функционал без модификации исходного кода других компонентов.
RSS-ленты
Синдикация контента через RSS-каналы
Полнотекстовый поиск
Интеграция с системой поиска по сайту
Комментарии
Подключение системы комментариев
Лента активности
Трекинг действий пользователей
Рейтинги
Система оценки контента
Очередь задач
Асинхронная обработка задач
Пакеты дополнений
Упаковка и распространение расширений
Пакет — это ZIP-архив, содержащий файлы определённой структуры для установки компонентов, виджетов, шаблонов, патчей и обновлений в InstantCMS.
Типы пакетов
Первичная установка нового дополнения. CMS автоматически создаёт записи в служебных таблицах.
Обновление существующего дополнения. Требует наличия установленного дополнения.
Общий пакет без автоматических записей в БД. Разработчик управляет базой вручную.
Структура пакета
package.zip
├── manifest.ru.ini # Манифест (обязательно)
├── package/ # Файлы дополнения
│ └── system/
│ └── controllers/
│ └── mycomp/ # Зеркалирует структуру сайта
├── install.sql # SQL-запросы установки
├── install.php # PHP-скрипт установки
├── icon.png # Иконка дополнения
└── deleted.files.txt # Файлы для удаления (обновление)
Секции манифеста
[info]
Название, изображение, ID дополнения
[version]
Номер версии: major, minor, build, date
[depends]
Зависимости: версия ядра, PHP, расширения
[author]
Информация об авторе: имя, сайт, email
[description]
Подробное описание дополнения
[install]
Тип пакета: component, widget, system
В SQL-файлах используйте {#} вместо реального префикса таблиц. Система автоматически заменит его на актуальный префикс при установке.
Видеоуроки
Обучающие материалы на YouTube
На официальном YouTube-канале InstantSoft доступны серии видеоуроков по разработке расширений для InstantCMS 2. Уроки охватывают все этапы — от создания компонента до упаковки в пакет.
Создание фронтенда
Серия из 4 уроков по созданию компонента
4 частиАдминистрирование
Серия из 2 уроков по бэкенду
2 частиРазработка виджетов
Урок по созданию виджетов
1 урокУпаковка расширений
Создание пакетов дополнений
1 урок