На схеме отображены модули движка и основные их взаимосвязи.

Системные модули создают необходимое окружение для обработки запросов. Это автоматическое подключение всех модулей по требованию, обработчик ошибок, сессии, бд, события и другие. Запрос пользователя обрабатывается в зависимости от своих параметров модулем Service, Site или другими.
Модуль Site собирает страницу из виджетов, перед этим, соответствующему виджету-форме сообщает о входящих для него данных, чтоб он их обработал. Виджеты отображаются в зависимости от адреса запроса, отображают любые данные. Виджетами формируется центральное содержимое, меню, формы или просто статика.
Модуль Service в отличие от Site не занимается шаблонизацией. По запросу выбирает соответствующий сервис, вызывает соответствующие запросу его методы, результаты методов подготавливает в формате JSON или в другом и отправляет клиенту.
По аналогии должны работать и модули Download и Feeder, но их пока нет.
Полтора года назад начался цикл статей про создание гибкой CMS и главной темой, на которой остановились подробно, была реализация объектной модели данных в реляционной СУБД (в MySql). Новые статьи давно уже не писались, но работа над моделью данных продолжала кипеть, порой, доходив до безумия. Сейчас мне хочется поделиться результатами той не простой, но интересной работы. В статье рассматривается объектная модель данных и структура базы данных для неё.
Необходимо предупредить, что нижеизложенную информацию будет легче понять тем, кто может представить четырехмерное пространство и не зациклиться на вопросе, что было раньше, яйцо или курица. Впрочем, я могу преувеличивать.
продолжение…
Создание программы можно сравнить с постройкой здания, но в отличие от построенного здания, программа постоянно требует внесения изменений в ответ на часто меняющиеся потребности её пользователей. Веб-сайт не исключение – его соответствие потребностям посетителей определяет его прибыльность, поэтому программное обеспечение, управляющее содержимым сайта, должно быть максимально гибким и легко изменяющимся, дабы не осложнять, а наоборот, способствовать развитию сайта. продолжение…
В предыдущей статье на примере создания объектной модели простого сайта производились одиночные загрузки сущностей из базы данных по их идентификаторам конструкцией Object::Create($id), при этом мы знали, у какой сущности (чаще всего класса), какой идентификатор, так как сами создавали эти сущности и в крайнем случаи могли просто заглянуть в базу данных. На практике загружать сущности по идентификатору проблематично, если нас интересуют сущности, о существовании которых можно только догадываться, то есть, не имея информации об их идентификаторах. Более того существует необходимость загружать несколько сущностей разом, отвечающих некоторым условиям. продолжение…
Продолжаем тему объектной модели данных. В этой части речь пойдет о модуле Data, являющимся, по сути, ORM системой. Для наглядности работы модуля Data c его помощью будет создано содержимое простого сайта.
Модуль Data состоит из классов Data, Object, Multy, Query и набора классов Cond*. Сам модуль – это статический класс Data, остальные классы используются для представления структур данных, с которыми он работает. Для представления сущностей в программном коде используется класс Object. Не важно, какого типа сущность – класс данных, объект данных или связь между ними – для всех Object. Класс Multy используется для ассоциации с набором сущностей, в частности, для представления множественных свойств. Классы Query и Cond* необходимы для осуществления поиска по объектной модели (в базе данных) с учетом гибких условий.
продолжение…