В предыдущей статье поставлена непростая задача. Напомню, что CMS должна выполнять своё предназначение, быть гибкой, расширяемой, с достаточной функциональностью, устойчивой и понятной для пользователя, совместимой с существующими стандартами, переносимой на другие платформы и эффективной. Создать систему с перечисленными критериями сложно, да и сходу непонятно как, но мы её создадим! Поможет в этом модульная архитектура. продолжение…
На схеме отображены модули движка и основные их взаимосвязи.

Системные модули создают необходимое окружение для обработки запросов. Это автоматическое подключение всех модулей по требованию, обработчик ошибок, сессии, бд, события и другие. Запрос пользователя обрабатывается в зависимости от своих параметров модулем Service, Site или другими.
Модуль Site собирает страницу из виджетов, перед этим, соответствующему виджету-форме сообщает о входящих для него данных, чтоб он их обработал. Виджеты отображаются в зависимости от адреса запроса, отображают любые данные. Виджетами формируется центральное содержимое, меню, формы или просто статика.
Модуль Service в отличие от Site не занимается шаблонизацией. По запросу выбирает соответствующий сервис, вызывает соответствующие запросу его методы, результаты методов подготавливает в формате JSON или в другом и отправляет клиенту.
По аналогии должны работать и модули Download и Feeder, но их пока нет.
Создаваемая система основана на модульном принципе. CMS полностью строится из модулей, как детский домик из кубиков. С целью достижения гибкости и простоты взаимодействия модулей, необходимо было достичь минимальных действий для использования модулей любым компонентом системы без необходимости создания жестких связей, а также сделать возможность легкого расширения действий модулей с помощью других модулей.
продолжение…