Документация Каталог Услуги Контакты

Разработка

Полное руководство по созданию компонентов, виджетов и расширений для InstantCMS

MVC
PHP
Пакеты

Обзор архитектуры

MVC-паттерн и структура системы

InstantCMS построена на архитектуре MVC (Model-View-Controller). Основной функционал реализован через компоненты — независимые модули, каждый из которых содержит контроллер, модель и шаблоны. Система поддерживает автозагрузку классов и пространства имён.

Автозагрузка классов

system/core/

Классы ядра системы

system/fields/

Классы полей форм

system/controllers/{name}/

Классы контроллеров

icms\

Пространство имён (Composer)

Цикл обработки запроса

1
Инициализация

Загрузка ядра и конфигурации

2
Маршрутизация

Определение контроллера и действия

3
Контроллер

Выполнение логики действия

4
Модель

Работа с данными

5
Шаблон

Рендеринг HTML

Ядро системы

Основные классы в /system/core/

Ядро InstantCMS состоит из набора системных классов, расположенных в директории /system/core/. Каждый класс отвечает за определённую область функциональности и доступен через глобальные объекты или статические методы.

cmsCore

Главный класс системы, точка входа

cmsController

Базовый класс всех контроллеров

cmsModel

Базовый класс моделей данных

cmsDatabase

Работа с базой данных (PDO)

cmsTemplate

Движок шаблонов и рендеринг

cmsForm

Генерация и валидация форм

cmsRequest

Обработка HTTP-запросов

cmsUser

Авторизация и данные пользователя

cmsCache

Система кэширования

cmsConfig

Управление конфигурацией

cmsPermissions

Система прав доступа

cmsEventsManager

Менеджер событий и хуков

cmsAction

Базовый класс действий

cmsWidget

Базовый класс виджетов

cmsMailer

Отправка почтовых сообщений

cmsBackend

Базовый класс админ-панели

cmsDebugging

Инструменты отладки

Контроллеры

Логика обработки запросов

Контроллер — основная единица функционала. Имя контроллера должно быть в нижнем регистре, из латинских букв, минимум 3 символа. Каждый контроллер размещается в собственной директории внутри /system/controllers/.

Структура директории контроллера

system/controllers/{name}/
/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. Система поддерживает наследование шаблонов, хелперы и схемы позиций.

Разделы документации шаблонов

01

CSS и JavaScript

Подключение стилей и скриптов, управление ассетами

02

Наследование шаблонов

Механизм наследования для создания дочерних шаблонов

03

SEO и мета-теги

Управление заголовками, описаниями и параметрами страниц

04

Макеты (Layouts)

Организация структуры страниц через макеты

05

Хелперы

Вспомогательные функции для использования в шаблонах

06

Опции шаблона

Настраиваемые параметры для кастомизации

07

Схема позиций

Определение областей для размещения виджетов

08

Создание шаблона

Практическое руководство по разработке нового шаблона

Разработка виджетов

Создание собственных виджетов

Виджеты бывают двух типов: общие (в /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     # Языковые константы

Ключевые методы и свойства

Метод / Свойство Тип Описание
run() метод Основной метод — генерация данных для шаблона
$this->options свойство Массив настроек виджета
$this->title свойство Заголовок виджета
options.form.php файл Определение формы настроек

Формы и поля

Система генерации и валидации форм

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

Встроенные типы полей

Текстовые

string text html number url hidden

Списки выбора

list listmultiple listbitmask listgroups

Медиа

file image images

Специальные

user users date age checkbox color city caption
Пользовательские поля

Вы можете создавать собственные типы полей, наследуя базовый класс поля. Для этого нужен файл класса поля и шаблон для рендеринга формы.

Хранение данных

Сессии, cookies и персональные настройки

InstantCMS предоставляет несколько механизмов для хранения различных данных помимо основной базы данных. Каждый механизм подходит для своих задач.

Сессии

Хранение данных текущего сеанса пользователя на стороне сервера

Cookies

Хранение данных на стороне клиента для запоминания предпочтений

УПН (UPS)

Универсальные персональные настройки пользователей, хранимые в базе данных

Уведомления

Система оповещений пользователей

Система уведомлений позволяет компонентам отправлять оповещения пользователям о различных событиях: новых комментариях, ответах, упоминаниях и других действиях. Уведомления отображаются в реальном времени через интерфейс сайта.

Внутренние

Уведомления внутри сайта, отображаемые в панели пользователя и счётчике непрочитанных

Email

Дублирование оповещений на электронную почту через класс cmsMailer

Интеграция компонентов

Механизмы взаимодействия между модулями

InstantCMS предоставляет набор механизмов для интеграции компонентов друг с другом. Это позволяет расширять функционал без модификации исходного кода других компонентов.

RSS-ленты

Синдикация контента через RSS-каналы

Полнотекстовый поиск

Интеграция с системой поиска по сайту

Комментарии

Подключение системы комментариев

Лента активности

Трекинг действий пользователей

Рейтинги

Система оценки контента

Очередь задач

Асинхронная обработка задач

Пакеты дополнений

Упаковка и распространение расширений

Пакет — это ZIP-архив, содержащий файлы определённой структуры для установки компонентов, виджетов, шаблонов, патчей и обновлений в InstantCMS.

Типы пакетов

Установка
Компонент Виджет

Первичная установка нового дополнения. CMS автоматически создаёт записи в служебных таблицах.

Обновление
Компонент Виджет

Обновление существующего дополнения. Требует наличия установленного дополнения.

Системный
Произвольный

Общий пакет без автоматических записей в БД. Разработчик управляет базой вручную.

Структура пакета

Структура ZIP-архива
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 урок