Система модулей и шаблонов
В архитектуре FirstWork важную роль играет механизм динамической загрузки модулей и шаблонов. Эти подсистемы обеспечивают расширяемость платформы, автоматическую синхронизацию файловой структуры и базы данных, а также корректную инициализацию компонентов при запуске системы. Благодаря этому FirstWork остаётся гибкой платформой, которую можно развивать без изменения ядра.
Система модулей отвечает за обнаружение, регистрацию и инициализацию всех модулей, расположенных в каталоге plugins. При запуске система получает список модулей, которые уже существуют в базе данных, после чего сканирует файловую систему и ищет каталоги модулей. Каждый модуль должен содержать файл module.php, который возвращает конфигурационный массив. Если обязательные параметры отсутствуют, модуль пропускается. Тип модуля определяет каталог, в котором он должен находиться, и если модуль расположен неправильно, он игнорируется. Это гарантирует строгую структуру и предотвращает ошибки.
Если модуль найден на диске, но отсутствует в базе данных, создаётся новая запись. При этом может быть вызвана функция install, если она определена в конфигурации. Если модуль уже существует, его статус обновляется, а версия сравнивается с версией в файле. При несовпадении версий вызывается install как миграция, после чего версия обновляется. Конфигурация модуля загружается в память всегда, независимо от его статуса. Если модуль активен, выполняется функция init, если она определена. Для некоторых типов модулей действует правило эксклюзивности, при котором активным может быть только один модуль определённого типа. Если активируется новый модуль эксклюзивного типа, предыдущий автоматически отключается. После завершения обработки система помечает отсутствующие на диске модули как missing, что позволяет корректно реагировать на их удаление.
Система шаблонов работает по аналогичному принципу, но отвечает за визуальную часть платформы. Она сканирует каталог templates и ищет директории, содержащие файл theme.php. Этот файл должен возвращать конфигурационный массив с обязательными параметрами. Если тема отсутствует в базе данных, создаётся новая запись. Конфигурация темы загружается в память, а если тема является активной, вызывается функция init, если она определена. Это позволяет теме выполнять собственную инициализацию, например подключать дополнительные стили или изменять поведение интерфейса. После обработки всех тем система удаляет из базы данных те темы, которые отсутствуют на диске, поддерживая согласованность данных.
Обе подсистемы являются важной частью архитектуры FirstWork. Они обеспечивают автоматическую установку, обновление и инициализацию компонентов, поддерживают строгую структуру каталогов, синхронизируют состояние файловой системы и базы данных и позволяют расширять функциональность без изменения ядра. Благодаря этому FirstWork остаётся модульной, предсказуемой и масштабируемой платформой, способной адаптироваться под любые задачи.