Skip to content

DSTGlobal/DST-Platform

Repository files navigation

DST Platform

DST Platform — гибридная система управления содержимым (CMS) и мощный Content Management Framework (CMF) на PHP с открытым исходным кодом. Спроектирована для максимальной гибкости, производительности и масштабируемости.

DST Platform

Официальный сайт: https://dstglobal.ru
GitHub: https://github.com/DSTGlobal


Содержание

  1. Вступление
  2. Системные требования
  3. Архитектура приложения
  4. Ядро системы
  5. Компоненты
  6. Модели
  7. Модули
  8. Система шаблонов
  9. Работа с Assets (CSS и JS)
  10. SEO и Мета-данные
  11. Разметка макета (Layout)
  12. Структура файловой системы
  13. Архитектура проекта
  14. Справочник файлов шаблона (Frontend)
  15. Лучшие практики и рекомендации
  16. Расширение системы (Hooks и Events)
  17. Заключение
  18. Контакты

1. Вступление

DST Platform — гибридная система, объединяющая в себе возможности системы управления содержимым (CMS) и мощного CMF (Content Management Framework) на языке PHP. Это серверное решение с открытым исходным кодом, спроектированное для обеспечения максимальной гибкости и производительности.

Архитектура платформы позволяет реализовывать веб-проекты любой сложности: от классических блогов и корпоративных сайтов до высоконагруженных социальных сетей, LMS, CRM-систем, досок объявлений, маркетплейсов, экосистем и отраслевых B2B-порталов. Основное преимущество DST Platform заключается в его универсальности и гибкости в разработке, что позволяет реализовывать даже самые сложные и индивидуальные проекты. Кроме того, DST Platform обладает высокой устойчивостью к высоким нагрузкам, поскольку его ядро изначально было разработано для социальных сетей с огромным количеством посещений.

DST Platform имеет модульную архитектуру с компактным ядром, обеспечивающим API для взаимодействия с модулями. Стандартный набор функций включает новостную ленту, блог, форум, загрузку файлов, сборщик новостей, голосования, поиск и другие. Дизайн сайта легко изменяется с помощью специальных модулей — "тем оформления". Эта гибкость делает платформу DST идеальным инструментом для создания разнообразных веб-проектов.

В DST Platform предлагается гибкая схема организации структуры сайта на основе таксономии. Таксономия является механизмом, который позволяет создавать произвольное количество тематических категорий для содержимого сайта и ассоциировать их с модулями, обеспечивающими ввод и вывод информации. Эта система позволяет организовать контент на сайте более эффективно и удобно для пользователей.

Категории могут быть представлены как плоскими или иерархическими списками, так и сложными структурами, где элемент может иметь несколько "родителей" и несколько дочерних элементов. Благодаря такой гибкой схеме, одними и теми же модулями можно организовать различные варианты структуризации содержимого, что обеспечивает большую гибкость и удобство в работе с сайтом.

Использование таксономии в DST Platform позволяет упорядочить информацию на сайте, делая ее более доступной и понятной для пользователей. Кроме того, такая система позволяет легко управлять контентом, добавлять новые категории и элементы, а также изменять структуру сайта в соответствии с потребностями бизнеса.

В целом, гибкая схема организации структуры сайта на основе таксономии в DST Platform обеспечивает эффективное управление контентом, улучшает пользовательский опыт и способствует более эффективной работе с сайтом.

1.1. Двойственная архитектура: социальная платформа и бизнес-экосистема

DST Platform построена на уникальной двойной архитектуре, объединяющей две мощные парадигмы веб-разработки:

Социальная часть Бизнес-часть
Унаследована и значительно расширена от философии Drupal. Построена на принципах современных e-commerce платформ уровня enterprise.
Фокус: Сообщества, взаимодействие пользователей, пользовательский контент. Фокус: Коммерческие транзакции, управление бизнес-процессами.
Примеры компонентов: groups, forum, wall, photos, comments, activity. Примеры компонентов: shop, partner, orders, delivery, payment, tenders.
Целевые проекты: Социальные сети, новостные порталы, образовательные платформы, клубы по интересам. Целевые проекты: Маркетплейсы, B2B-порталы, системы электронной коммерции, сервисные платформы.

Ключевое преимущество: Обе части не просто сосуществуют, а глубоко интегрированы через единое ядро (cmsCore), общую систему пользователей (cmsUser), права доступа (cmsPermissions) и систему событий (cmsEventsManager). Это позволяет создавать гибридные экосистемы, например:

  • Маркетплейс с социальными функциями (обсуждения товаров, рейтинги продавцов, user-generated content).
  • Корпоративный портал с внутренней социальной сетью и инструментами для закупок.
  • Образовательная платформа с курсами (бизнес-логика) и сообществами учащихся (социальная часть).

Язык описания: DST Platform не является "надстройкой" одной системы над другой. Это единая платформа с двумя равноправными доменами, каждый из которых использует общие абстракции ядра, но реализует свою предметную область.

1.2. Гибридная философия как конкурентное преимущество

DST Platform отказывается от дихотомии "простая CMS vs. сложный фреймворк". Вместо этого она предлагает многоуровневую модель разработки:

  1. Уровень Конфигурации: Быстрое создание типов контента без кода.
  2. Уровень Расширения: Кастомизация через хуки и наследование классов.
  3. Уровень Разработки: Создание полноценных компонентов с нуля.

Эта модель, помноженная на симбиоз социальной и бизнес-логики в одном ядре, делает DST Platform уникальным инструментом для построения современных цифровых экосистем, где взаимодействие пользователей и коммерческие транзакции переплетаются в едином цифровом пространстве.


2. Системные требования

Для использования облачной версии платформы вам потребуется только доменное имя.

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

DST Platform нетребователен к хостингу и серверу, поэтому в большинстве случаев ваш сервер или хостинг будет соответствовать техническим требованиям.

Для корректной работы DST Platform ваш сервер или хостинг должен иметь следующее ПО:

  • Веб-сервер Apache с установленным модулем mod_rewrite*
  • Интерпретатор PHP версии 7+
  • Модули для PHP: gd, iconv, mbstring, simplexml, json, filter, curl
  • СУБД MySQL 5+, MariaDB
  • Опции PHP register_globals и magic_quotes_gpc должны быть выключены.

* Поддерживается и веб-сервер NGINX, однако все правила из файлов .htaccess должны быть перемещены в локейшены NGINX аналогичным образом.


3. Архитектура приложения

DST Platform построена на классическом паттерне MVC (Model-View-Controller), что обеспечивает четкое разделение логики приложения, работы с данными и их визуального представления.

Функциональные блоки системы называются Компонентами. Компонент — это самодостаточная единица функционала (например, "Новости", "Пользователи", "Магазин").

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

  1. Контроллер (Controller): Обрабатывает запросы и содержит бизнес-логику.
  2. Модель (Model): Управляет данными и взаимодействием с базой.
  3. Шаблон (View): формируют HTML-представление.

Компонент может содержать любую комбинацию этих частей: например, только модель (для фоновой логики) или только шаблоны (для статического контента).

3.1. Автоматическая загрузка классов (Autoloading)

Платформа использует собственную систему автозагрузки классов, основанную на соглашениях об именовании и расположении файлов:

Директория Префикс имени класса Пример
/system/core/ cms cmsActionaction.php
/system/fields/ field fieldDatedate.php
/system/controllers/NAME/model.php model modelUsersusers/model.php

Также поддерживается загрузка классов по пространствам имён (namespaces), что позволяет интегрировать сторонние библиотеки и использовать современные практики PHP-разработки.

3.2. Контроллеры

Контроллер — это точка входа для логики компонента.
Контроллер — центральный элемент компонента, отвечающий за:

  • приём HTTP-запросов (GET, POST и др.);
  • валидацию входных данных;
  • вызов методов модели;
  • подготовку данных для отображения;
  • возврат ответа (HTML, JSON, редирект и т.п.).

Каждый компонент может иметь два контроллера:

  • Frontend — для публичной части сайта;
  • Backend — для административной панели.

3.3. Модели

Модель абстрагирует работу с базой данных. Контроллер никогда не должен писать прямые SQL-запросы; вместо этого он обращается к методам модели (например, getUsers(), saveItem()). Это обеспечивает безопасность и централизацию логики данных.

Модель инкапсулирует всю логику работы с данными:

  • выборка записей;
  • фильтрация и сортировка;
  • вставка, обновление, удаление;
  • валидация и санитизация.

⚠️ DST Platform не использует ORM в классическом понимании. Модель — это не объект отдельной записи, а утилитарный класс, предоставляющий методы для работы с таблицами БД. Это снижает накладные расходы и даёт полный контроль над SQL-запросами, при этом сохраняя уровень абстракции.

Преимущества такого подхода:

  • отсутствие "магии" ORM — прозрачность запросов;
  • возможность быстрой оптимизации под конкретные сценарии;
  • теоретическая возможность замены СУБД без изменения контроллеров.

3.4. Шаблоны

Шаблоны отвечают исключительно за визуальное представление данных. Они содержат:

  • HTML-разметку;
  • минимальный PHP-код (только для условий, циклов и форматирования);
  • вызовы вспомогательных функций (хелперов).

Логика обработки данных не должна находиться в шаблонах — она строго отделена в контроллерах и моделях.

3.5. Жизненный цикл запроса

При каждом обращении пользователя к сайту выполняется следующая последовательность:

  1. Запускается точка входа — файл index.php.
  2. Роутер анализирует URL и определяет, какой компонент и действие (action) запрошены.
  3. Вызывается соответствующий контроллер (frontend или backend).
  4. Контроллер получает параметры запроса (из URL, POST-данных и т.д.).
  5. При необходимости — обращается к модели для получения или сохранения данных.
  6. Обрабатывает данные (например, формирует массив для вывода).
  7. Передаёт данные в шаблон.
  8. Шаблон генерирует HTML и возвращает его пользователю.

💡 Таким образом, основная бизнес-логика сосредоточена в контроллерах, что упрощает отладку и поддержку.

3.6. Два подхода к созданию функциональности: Гибридная модель разработки

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

Подход 1: Декларативное создание типов контента (Без кода)

  • Механизм: Использование встроенного генератора компонентов и универсального компонента content.
  • Как работает: Через административный интерфейс вы создаёте новый "Тип контента" (например, "Каталог оборудования", "Портфолио", "База знаний"). Вы определяете:
    • Структуру данных (поля: текст, изображения, цены, привязки).
    • Формы ввода.
    • Шаблоны отображения (список, детальная страница).
    • Категории и теги.
  • Преимущества:
    • Мгновенная интеграция: Созданный тип контента сразу наследует все системные возможности: SEO, кэширование, поиск, комментарии, права доступа.
    • Быстрота: Функциональность создаётся за минуты без написания PHP-кода.
    • Безопасность: Логика работы с БД и валидация данных обеспечиваются проверенным ядром cmsModel и cmsForm.
  • Идеально для: Быстрого прототипирования, создания стандартных сущностей (статьи, новости, каталоги), когда бизнес-логика укладывается в рамки CRUD-операций.

Подход 2: Императивная разработка компонентов (Написание кода)

  • Механизм: Создание кастомного компонента "с нуля" в папке /system/controllers/{my_component}/ с написанием PHP-классов (controller, model) и шаблонов.
  • Как работает: Разработчик полностью контролирует:
    • Сложную бизнес-логику в контроллере.
    • Оптимизированные SQL-запросы и нетривиальные связи данных в модели.
    • Любые кастомные API-эндпоинты.
    • Специфичный пользовательский интерфейс.
  • Преимущества:
    • Полная гибкость: Возможность реализовать любую, самую сложную логику.
    • Максимальная производительность: Ручная оптимизация критических участков кода.
    • Глубокая интеграция: Использование низкоуровневых API ядра для нестандартных задач.
  • Идеально для: Реализации ядра маркетплейса (shop), системы доставок, платежных шлюзов, сложных интерактивных сервисов (чат, конструкторы).

Стратегический выбор подхода

Платформа не принуждает к одному пути. Эффективная разработка на DST Platform — это искусство выбора:

  1. Начните с Генератора. Создайте прототип сущности через "Тип контента". Получите работающую модель с админкой и фронтендом.
  2. Расширяйте кодом по мере необходимости. Когда потребуется нестандартная логика:
    • Создайте кастомный контроллер, который будет обрабатывать специфичные экшены.
    • Расширьте сгенерированную модель (modelMyContent) своими методами.
    • Используйте систему хуков, чтобы "встроить" свою логику в стандартный жизненный цикл сгенерированного типа контента (например, добавить проверку при сохранении).

DST Platform предлагает не "или/или", а континуум. Вы двигаетесь от быстрой декларативной разработки к глубокой императивной кастомизации ровно настолько, насколько это требуется проекту. Это снижает порог входа для простых задач, но не ограничивает профессионалов в реализации сложных систем.


4. Ядро системы

Ядро DST Platform (/system/core/) — это набор синглтонов и базовых классов, обеспечивающих низкоуровневый функционал.

Файл Класс Назначение
action.php cmsAction Работа с действиями (actions) контроллеров
backend.php cmsBackend Базовый класс для контроллеров админки
cache.php cmsCache Абстракция кэширования
cachefiles.php cmsCacheFiles Кэширование в файловой системе
cachememory.php cmsCacheMemory Кэширование через Memcached
config.php cmsConfig Управление глобальной конфигурацией
controller.php cmsController Базовый класс всех контроллеров
core.php cmsCore Главный класс, инициализирующий CMS
database.php cmsDatabase Низкоуровневый доступ к БД
debugging.php cmsDebugging Инструменты отладки
eventsmanager.php cmsEventsManager Система событий и хуков
form.php cmsForm Базовый класс форм
formfield.php cmsFormField Базовый класс полей формы
frontend.php cmsFrontend Базовый класс frontend-контроллеров
mailer.php cmsMailer Отправка email-сообщений
model.php cmsModel Базовый класс моделей
nestedsets.php cmsNestedsets Работа с иерархическими структурами (вложенные множества)
permissions.php cmsPermissions Управление правами доступа
request.php cmsRequest Анализ и обработка HTTP-запросов
template.php cmsTemplate Система шаблонизации
uploader.php cmsUploader Загрузка и обработка файлов
user.php cmsUser Работа с текущим пользователем
widget.php cmsWidget Базовый класс модулей (виджетов)

Эти классы предоставляют единый интерфейс для разработчиков и гарантируют согласованность поведения всей системы.


5. Компоненты

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

Структура компонента может варьироваться:

  • Full-stack: Frontend + Backend + Model.
  • Headless/Service: Только Model (для API или служебных функций).
  • Event Handler: Контроллер, существующий только для перехвата хуков (событий) других компонентов.

Компонент — это автономный функциональный модуль, реализующий определённую часть функциональности сайта (например, "Форум", "Магазин", "Профили пользователей").

Требования к именованию контроллеров:

  • Имя должно начинаться с буквы (латинской, нижний регистр);
  • Может содержать буквы, цифры и символ подчёркивания _;
  • Минимальная длина — 3 символа;
  • Имя должно быть уникальным и семантически отражать назначение компонента.

⚠️ Если компонент создаётся только для обработки событий (хуков), рекомендуется выбирать такое имя, которое не конфликтует с уже существующими компонентами и не предполагает будущего расширения до полноценного frontend/backend. Например, вместо content лучше использовать content_hooks или myproject_content_listener.

Файлы компонента располагаются в:

/system/controllers/{название_компонента}/

Компонент может включать:

  • Только модель (фоновая логика);
  • Только frontend (публичная часть);
  • Только backend (админка);
  • Только обработчики событий;
  • Любую комбинацию вышеуказанных частей.

5.1. Публичная часть (frontend)

Включает:

  • файлы и структуру директорий;
  • действия контроллера (actions);
  • механизм переопределения контроллера;
  • обработку HTTP-запросов;
  • взаимодействие с моделью;
  • доступ к системным объектам (cmsUser, cmsConfig и др.);
  • языковые файлы;
  • шаблоны вывода;
  • формы;
  • обработку событий (через хуки);
  • работу с пользователями (авторизация, права и т.д.).

5.2. Административная часть (backend)

Каждый компонент может иметь собственный раздел в панели управления. Для этого необходимо реализовать backend-контроллер.

Особенности backend:

  • Регистрация компонента в БД (автоматически или вручную);
  • Отдельная структура файлов (/backend/);
  • Использование той же модели или расширенной backend-модели;
  • Формирование меню админки;
  • Стандартная форма настроек компонента;
  • Работа с таблицами данных (CRUD-интерфейсы);
  • Управление правами доступа к разделу;
  • Универсальные действия (например, переключение boolean-полей одним кликом).

6. Модели

Модель в DST Platform (cmsModel) — это слой абстракции данных (DAL). Она не является классической ORM (где одна запись = один объект), но предоставляет удобный Query Builder.

Возможности модели:

  • CRUD операции (Create, Read, Update, Delete).
  • Автоматическая фильтрация и валидация входящих данных.
  • Защита от SQL-инъекций (использование подготовленных выражений).
  • Поддержка событий (beforeSave, afterSave и т.д.).

Наследование:

  • Стандартно: class modelMyComp extends cmsModel {}
  • Расширение чужой модели: class modelMyComp extends modelContent {}
  • Backend-модели: Начиная с версии 2.14.2, админка может иметь свою модель (/backend/model.php), наследуемую от основной.

Модель — это класс, предоставляющий унифицированный интерфейс для работы с данными. Она абстрагирует SQL-запросы и обеспечивает безопасность за счёт автоматической фильтрации входных данных.

Основные операции:

  • insert() — добавление записи;
  • update() — обновление;
  • delete() — удаление;
  • getItem() / getItems() — выборка одной или нескольких записей;
  • filter() — применение условий фильтрации.

Расположение и именование:

  • Файл: /system/controllers/{component}/model.php
  • Класс: model{Component} (например, modelComments)
  • Наследуется от cmsModel

Пример:

class modelShop extends cmsModel {
    // кастомная логика для магазина
}

Можно наследовать от другой модели:

class modelPartner extends modelShop {
    // расширение функционала магазина для продавцов
}

Также поддерживаются отдельные модели для backend:

  • Путь: /system/controllers/{component}/backend/model.php
  • Класс: modelBackend{Component}
  • Обычно наследуется от основной модели.

7. Модули

Модули — это независимые блоки контента, которые могут отображаться в различных зонах страницы (header, sidebar, footer и т.д.).

Типы модулей:

Тип Описание Примеры
Общий Самостоятельный, не привязан к компоненту Меню, текстовый блок, погода
Виджет компонента Использует модель компонента для получения данных Список товаров, последние комментарии, форма входа
  1. Общие (General): Не зависят от компонентов.
    • Примеры: HTML-блок, Меню, Погода.
    • Расположение: /system/widgets/.
  2. Виджеты компонентов (Component Widgets): Тесно связаны с логикой конкретного компонента.
    • Примеры: "Новые статьи" (компонент Content), "Популярные товары" (компонент Shop).
    • Расположение: /system/controllers/{COMPONENT}/widgets/.

Каждый виджет состоит из PHP-класса (логика) и TPL-файла (шаблон).

Различия касаются:

  • расположения файлов;
  • именования класса;
  • отображения в палитре модулей админки.

8. Система шаблонов

Шаблоны хранятся в /templates/. Система поддерживает наследование шаблонов, что позволяет создавать дочерние темы, переопределяя только необходимые файлы, а не копируя весь шаблон целиком.

8.1. Структура шаблона

Файл шаблона — это PHP-файл с расширением .tpl.php.

/templates/{theme_name}/
├── main.tpl.php                  # Главный макет сайта
├── admin.tpl.php                 # Макет админки
├── scheme.html                   # Схема позиций для модулей
├── css/                          # Глобальные стили
├── js/                           # Глобальные скрипты
├── images/                       # Изображения шаблона
├── controllers/                  # Шаблоны компонентов
│   └── {controller_name}/
│       ├── view.tpl.php
│       ├── styles.css            # Стили компонента
│       └── backend/              # Шаблоны админки компонента
├── widgets/                      # Шаблоны общих модулей
└── assets/                       # Системные шаблоны (ошибки, UI, поля форм)

8.2. Механизм наследования

В файле inherit.php в корне темы можно задать родительский шаблон.

  • Пример: Тема dark наследуется от default.
  • Логика: При запросе файла система ищет его в dark. Если не находит — берет из default. Это касается TPL, CSS и JS файлов (при правильном подключении).

9. Работа с Assets (CSS и JS)

Для корректной работы наследования, кэширования и объединения файлов (minification), ресурсы подключаются через методы cmsTemplate.

Основные методы:

  • Получение путей:
    $this->getTplFilePath('js/script.js') // вернет путь с учетом наследования.
  • Подключение CSS:
    $this->addMainCSS('path/style.css')   // в <head>, участвует в слиянии.
    $this->addCSS('path/style.css')       // в конец списка стилей.
    $this->addControllerCSS('styles.css', 'component_name') // авто-поиск CSS компонента.
  • Подключение JS:
    $this->addMainJS('path/script.js')    // в <head>.
    $this->addJS('path/script.js')        // перед закрывающим </body>.
    $this->getLangJS(['LANG_YES', 'LANG_NO']) // передача языковых констант из PHP в JS-переменные.

10. SEO и Мета-данные

Управление мета-тегами осуществляется в контроллерах, но вывод происходит в методе $this->head() шаблона.

$this->setPageTitle('Заголовок')               // устанавливает <title>.
$this->setMeta('keywords', 'word1, word2')     // ключевые слова.
$this->setPageDescription('Описание')          // мета-тег description.
$this->addHead('<meta property="og:image" content="...">') // добавление произвольных тегов (Open Graph, canonical и др.).

11. Разметка макета (Layout)

Макет (main.tpl.php) определяет каркас страницы.

Ключевые методы внутри макета:

$this->renderHead() / $this->head()            // вывод CSS, JS, Meta.
$this->body()                                  // вывод основного контента (результат работы контроллера).
$this->widgets('position_name')                // вывод виджетов в указанной позиции.
$this->hasWidgetsOn('position_name')           // проверка наличия виджетов (удобно для скрытия пустых колонок).
cmsUser::getSessionMessages()                  // вывод системных уведомлений (ошибки, успех).
$this->breadcrumbs()                           // вывод навигационной цепочки.

12. Структура файловой системы

Ниже приведена детальная карта файловой системы DST Platform с описанием назначения ключевых компонентов.

Корневая структура

  • /cache — Кэш системы (автогенерируемый).
  • /upload — Пользовательские файлы (картинки, документы).
  • /system — Ядро и логика.
  • /templates — Темы оформления.

Детализация /system/controllers/ (Компоненты)

Система поставляется с обширным набором компонентов, которые можно разделить на логические группы:

  1. Системные и Базовые

    • admin — Панель управления.
    • auth — Авторизация, регистрация, восстановление пароля.
    • users — Профили пользователей, Личный кабинет покупателя.
    • groups — Сообщества/Группы пользователей.
    • activity — Лента активности (Feed).
    • search — Глобальный поиск (индексация контента).
    • images — Обработка изображений (ресайз, пресеты).
    • geo — Геолокация (страны, регионы, города).
    • tags — Управление тегами (облако тегов).
    • sitemap — Генерация карты сайта (XML).
    • notifications — Уведомления.
    • messages — Личные сообщения (внутренний мессенджер).
  2. E-Commerce (Маркетплейс и Магазин)

    • shop — Ядро маркетплейса. Каталог, корзина, заказы.
    • partner — Личный кабинет Продавца (Vendor Dashboard).
    • payment — Платежные шлюзы.
    • delivery — Службы доставки.
    • orders — Управление заказами.
    • tenders — Система тендеров и закупок.
    • stocks — Акции и скидки продавцов.
    • market — Интеграция с Яндекс.Маркет (генерация YML).
    • purchase_requisition — Заявки на закупку.
  3. Контент и Социальные функции

    • content — Универсальный конструктор контента (статьи, новости, посты).
    • news, posts, help — Предустановленные типы контента.
    • comments — Система древовидных комментариев.
    • forum — Полнофункциональный форум.
    • photos — Фотоальбомы пользователей.
    • stories — "Истории" (формат Stories) для продавцов и пользователей.
    • rating — Система рейтингов и кармы.
    • reviews — Отзывы (о товарах, пользователях, магазинах).
    • wall — Стена профиля пользователя.
  4. Инструменты разработки и утилиты

    • api — REST API для мобильных приложений и внешних интеграций.
    • forms — Конструктор форм.
    • instyler — Визуальный редактор CSS стилей элементов.
    • inthemer — Конструктор тем оформления.
    • parsing — Парсер контента с внешних источников.
    • seopages — Менеджер SEO-страниц (тегирование, посадочные страницы).
    • ai — DST AI: Мультимодальный ИИ (генерация описаний, чат-боты поддержки).

13. Архитектура проекта

Ниже приведена полная структура проекта с пояснением назначения каждой директории и ключевых компонентов:

root/
├── cache/                 # Кэш-файлы (страницы, данные, временные объекты)
├── css/                   # CSS-файлы сторонних библиотек и глобальных стилей
├── exports/               # Экспорт/импорт данных (например, для интеграции с маркетплейсами)
│   └── jobs/
│       ├── tmp/           # Временные файлы экспорта
│       ├── yml_category/  # Экспорт категорий в формате YML
│       ├── yml_category_market/  # Экспорт категорий для Яндекс.Маркета
│       └── yml_json/      # JSON/YML-выгрузки товаров
├── modal/                 # Описания модальных окон и UI-компонентов панели управления
├── system/                # Ядро и системные компоненты платформы
│   ├── config/
│   │   ├── autoload.php   # Настройки автозагрузки классов
│   │   ├── config.php     # Главный конфигурационный файл (подключение БД, пути, режим отладки)
│   │   └── remap.php      # Правила перенаправления URL (для SEO и ЧПУ)
│   ├── controllers/       # Все компоненты системы (логика сайта)
│   ├── core/              # Системные классы ядра (cmsCore, cmsModel, cmsTemplate и др.)
│   ├── fields/            # Классы пользовательских полей форм (например, fieldDate, fieldImage)
│   ├── languages/         # Языковые файлы интерфейса
│   ├── libs/              # Сторонние библиотеки и утилиты
│   └── widgets/           # Глобальные модули (виджеты), не привязанные к конкретному компоненту
├── templates/             # Шаблоны оформления (темы)
│   └── default/           # Стандартная тема, от которой наследуются все остальные
│       ├── assets/
│       │   ├── errors/    # Страницы ошибок (404, сайт выключен и т.п.)
│       │   ├── fields/    # Шаблоны отображения полей форм
│       │   ├── includes/  # Переопределение отдельных страниц по ID категории (Landing Page)
│       │   ├── pages/     # Переопределение страниц по URL (произвольный дизайн любой страницы)
│       │   ├── special/   # Специальные шаблоны (например, для компонента Club)
│       │   ├── template/
│       │   │   ├── footers/     # Разные футеры для разных разделов сайта
│       │   │   ├── headers/     # Разные хедеры
│       │   │   ├── modals/      # Модальные окна (например, выбор геолокации)
│       │   │   └── *.tpl.php    # PHP-инклюды, подключаемые напрямую через include()
│       │   └── ui/        # Элементы интерфейса: хлебные крошки, фильтры, пагинация
│       ├── content/       # Шаблоны типов контента (новости, статьи и т.д.)
│       ├── controllers/   # Шаблоны конкретных компонентов
│       │   ├── activity/          # Лента активности
│       │   ├── admin/             # Панель управления
│       │   ├── ai/                # DST AI — мультимодальный ИИ для поддержки, генерации карточек и контента
│       │   ├── api/               # REST API
│       │   ├── auth/              # Авторизация и регистрация
│       │   ├── comments/          # Комментарии
│       │   ├── content/           # Универсальный контент-менеджер
│       │   ├── docs/              # Документооборот (часть shop)
│       │   ├── feedback/          # Обратная связь
│       │   ├── forum/             # Форум
│       │   ├── frontpage/         # Главная страница как Landing Page
│       │   ├── geo/               # Геолокация
│       │   ├── groups/            # Группы и сообщества
│       │   ├── help/              # Справочный центр (тип контента)
│       │   ├── home/              # Главная страница сервисов
│       │   ├── ie/                # Импорт/экспорт (для shop)
│       │   ├── images/            # Управление изображениями
│       │   ├── index/             # Альтернативная главная
│       │   ├── instyler/          # Конструктор страниц (визуальное редактирование любого элемента)
│       │   ├── inthemer/          # Конструктор тем (визуальное создание шаблонов)
│       │   ├── live_editor/       # Редактор в реальном времени
│       │   ├── mail/              # Почтовые уведомления (shop)
│       │   ├── market/            # Генерация категорий для Яндекс.Маркета
│       │   ├── menu/              # Меню
│       │   ├── messages/          # Внутренний мессенджер
│       │   ├── moderate_content/  # Модерация контента (shop)
│       │   ├── moderation/        # Модерация (социальная часть)
│       │   ├── news/              # Новости (тип контента)
│       │   ├── notifications/     # Уведомления
│       │   ├── onebuilder/        # Конструктор модулей (drag & drop)
│       │   ├── parsing/           # Парсинг контента из внешних источников
│       │   ├── partner/           # Личный кабинет продавца
│       │   ├── payment/           # Платежи
│       │   ├── photos/            # Фотоальбомы
│       │   ├── positions/         # Рекламная биржа
│       │   ├── posts/             # Посты (тип контента, "Клуб")
│       │   ├── purchase_requisites/  # Смена реквизитов продавца
│       │   ├── purchase_requisition/ # Заявки на закупку
│       │   ├── rating/            # Рейтинги
│       │   ├── recaptcha/         # CAPTCHA
│       │   ├── redirect/          # Управление редиректами
│       │   ├── referal/           # Реферальная программа
│       │   ├── reviews/           # Отзывы о товарах и магазинах
│       │   ├── rss/               # RSS-ленты
│       │   ├── sc_pushnotifications/ # Push-уведомления
│       │   ├── search/            # Поиск
│       │   ├── seopages/          # Менеджер мета-тегов (SEO)
│       │   ├── shop/              # Основной компонент маркетплейса
│       │   │   ├── admin/         # Админка магазина
│       │   │   ├── assets/        # Стили, скрипты, изображения shop
│       │   │   ├── block/         # Блоки контента
│       │   │   ├── delivery/      # Доставка
│       │   │   ├── items/         # Товары (табличный вывод)
│       │   │   ├── mail/          # Email-уведомления покупателей/продавцов
│       │   │   ├── reviews/       # Отзывы к товарам
│       │   │   ├── utils/         # Вспомогательные утилиты
│       │   │   └── widgets/       # Виджеты магазина
│       │   ├── sitemap/           # Карта сайта
│       │   ├── stocks/            # Акции (тип контента)
│       │   ├── stories/           # Сторисы продавцов
│       │   ├── subscriptions/     # Подписки
│       │   ├── tags/              # Теги
│       │   ├── tenders/           # Тендеры
│       │   ├── ueb/               # Унифицированный электронный билет
│       │   ├── users/             # Профили пользователей / ЛК покупателя
│       │   ├── wall/              # Стена пользователя
│       │   ├── widgets/           # Виджеты (компонент)
│       │   └── wysiwygs/          # Визуальные редакторы (TinyMCE, CKEditor и др.)
│       ├── css/                   # Базовые стили темы default
│       ├── images/                # Изображения темы
│       ├── js/                    # JavaScript-скрипты темы
│       ├── profiles/              # Стилизация профилей пользователей
│       ├── shop/                  # Специфичные стили и скрипты для магазина
│       ├── widgets/               # Шаблоны глобальных виджетов
│       ├── admin.tpl.php          # Макет панели управления
│       ├── main.tpl.php           # Основной макет сайта
│       ├── options.css.php        # Динамические CSS-стили (на основе настроек темы)
│       ├── options.form.php       # Форма настроек темы в админке
│       └── scheme.html            # Визуальная схема позиций виджетов
└── index.php              # Точка входа в приложение

14. Справочник файлов шаблона (Frontend)

Для быстрой навигации при кастомизации дизайна используйте этот список ключевых файлов шаблона default:

Основные страницы

  • /main.tpl.php — Главный каркас сайта.
  • /controllers/auth/login.tpl.php — Вход и регистрация.

Маркетплейс (Компонент Shop)

  • /controllers/shop/index.tpl.php — Витрина магазина.
  • /controllers/shop/category_list.tpl.php — Список товаров (категория).
  • /controllers/shop/item_view.tpl.php — Карточка товара (детальная).
  • /controllers/shop/cart.tpl.php — Корзина.
  • /controllers/shop/compare.tpl.php — Сравнение товаров.

Личный кабинет Покупателя (Users)

  • /controllers/users/profile_template.tpl.php — Обёртка профиля (меню ЛК).
  • /controllers/users/profile/orders.tpl.php — История заказов.
  • /controllers/users/profile/notifications.tpl.php — Центр уведомлений.

Личный кабинет Продавца (Partner)

  • /controllers/partner/profile.tpl.php — Общая структура ЛК продавца.
  • /controllers/partner/pages/products.tpl.php — Управление товарами.
  • /controllers/partner/pages/orders/index.tpl.php — Управление заказами (для продавца).

Стили (CSS)

  • /css/style.css — Основные стили темы.
  • /shop/styles.css — Специфичные стили магазина.
  • /shop/bootstrap.css — Сетка и компоненты Bootstrap (изолированные).
  • /css/theme-content.css — Типографика статей и контента.

15. Лучшие практики и рекомендации

  1. Не изменяйте ядро (/system/core/). Для кастомизации используйте:

    • События (Hooks): Подпишитесь на системное событие, чтобы добавить свою логику.
    • Наследование классов: Создайте свой класс, наследующий от системного, и укажите его использование в конфигурации (если поддерживается).
    • Шаблоны и стили: Все изменения внешнего вида — в папке /templates/.
  2. Безопасность:

    • Всегда используйте методы cmsModel или подготовленные запросы ($this->db->query($sql, $params)) для работы с БД.
    • Для данных от пользователя используйте cmsRequest::get(), cmsRequest::post() или $this->request->get() в контроллере (обеспечивает фильтрацию).
    • Валидируйте и фильтруйте данные в формах с помощью правил (rules) в cmsForm.
  3. Производительность:

    • Активно используйте кэширование (cmsCache). Кэшируйте результаты тяжёлых запросов, страницы, вычисления.
    • Включайте opcache в продакшн-среде.
    • Используйте встроенные настройки объединения и минификации CSS/JS.
  4. Создание собственных полей для контента:

    • Новые типы полей (например, "цвет" или "геопозиция") создаются путём добавления класса в /system/fields/ (например, fieldColor.php с классом fieldColor).
  5. Отладка:

    • Используйте cmsDebugging для логирования.
    • Включите режим отладки в настройках (/system/config/config.php), чтобы видеть подробные ошибки и SQL-запросы (только на staging!).

16. Расширение системы (Hooks и Events)

Одна из самых мощных возможностей DST Platform — система событий (cmsEventsManager). Она позволяет вашему компоненту реагировать на действия других компонентов.

Пример:

// В методе контроллера или модели:
// 1. Инициировать событие
$updated_data = cmsEventsManager::hook('content_before_update', $item);

// 2. Подписаться на событие (в хуке вашего компонента)
// Файл: /system/controllers/my_component/hooks.php
public function hookContentBeforeUpdate($item) {
    // Ваша логика, модифицирующая $item
    $item['modified_by'] = cmsUser::getInstance()->id;
    return $item; // Вернуть изменённые данные
}

Таким образом можно модифицировать данные, добавлять свои проверки, логировать действия и интегрировать функциональность разных компонентов без их прямой правки.


17. Заключение

DST Platform предоставляет разработчику сбалансированный инструментарий: от удобных высокоуровневых абстракций для быстрой разработки типовых задач (cmsModel, cmsForm) до низкоуровневого доступа и мощной системы событий для реализации сложной, уникальной логики.

DST Platform — это зрелая, масштабируемая и гибкая платформа, сочетающая простоту CMS с возможностями enterprise-фреймворка. Её архитектура позволяет разработчикам быстро создавать сложные проекты, сохраняя контроль над каждой частью системы.

Данная документация предназначена для профессиональных разработчиков, стремящихся к глубокому пониманию внутреннего устройства DST Platform и эффективному использованию её возможностей.


18. Контакты

About

DST Platform — гибридная система, объединяющая в себе возможности системы управления содержимым (CMS) и мощного CMF (Content Management Framework) на языке PHP. Это серверное решение с открытым исходным кодом, спроектированное для обеспечения максимальной гибкости и производительности.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors