Таблица system
Таблица system служит реестром всех расширений ядра Drupal. В ней содержится критически важная информация о состоянии, версиях, зависимостях и расположении каждого модуля, темы и профиля. Эта таблица активно используется системой при включении/отключении модулей, обновлении системы, проверке зависимостей и построении маршрутизации.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
filename |
varchar(255) |
Путь к основному файлу модуля, темы или профиля относительно корня установки Drupal (например, modules/node/node.module). Является первичным ключом таблицы.
|
name |
varchar(255) |
Машинное имя расширения. Должно совпадать с именем, указанным в файле .info.yml. |
type |
varchar(12) |
Тип записи. Может принимать значения: module (модуль), theme (тема оформления), profile (профиль установки). |
owner |
varchar(255) |
Путь к корневой директории расширения относительно корня Drupal (например, modules/node). Для тем это путь к папке темы.
|
status |
int |
Текущий статус расширения: 0 - отключено, 1 - включено. Для модулей ядра Drupal всегда 1.
|
bootstrap |
int |
Указывает, что модуль должен быть загружен на ранней стадии bootstrap процесса Drupal (значение 1). Такие модули критически важны для работы системы (например, system, database).
|
schema_version |
int |
Текущая версия схемы базы данных для данного модуля. Используется системой обновлений Drupal для отслеживания и применения хуков hook_update_N().
|
weight |
int |
Вес модуля, влияющий на порядок его загрузки и выполнения хуков. Модули с меньшим весом загружаются раньше. |
info |
blob |
Сериализованный массив с содержимым файла MODULE.info.yml. Содержит метаданные: имя, описание, зависимости, версию и другую информацию о расширении.
|
Как это работает
При первой установке Drupal или при очистке кеша система сканирует директории modules, themes и profiles в поисках файлов *.info.yml. Найденная информация парсится и записывается в таблицу system. Этот процесс известен как "обнаружение расширений" (extension discovery).
Поле status определяет, активно ли расширение. Включение или отключение модуля через административный интерфейс изменяет значение этого поля. При отключении модуля его функциональность перестает быть доступной, но таблицы и данные модуля в базе данных остаются нетронутыми.
Поле schema_version является ключевым для системы обновлений. Когда разработчик модуля добавляет новый хук обновления (например, hook_update_8001()), система сравнивает текущее значение schema_version с доступными обновлениями и применяет необходимые, последовательно увеличивая номер версии.
Порядок загрузки модулей определяется полями weight и bootstrap. Сначала загружаются bootstrap-модули, затем все остальные, отсортированные по весу. Это важно для разрешения зависимостей между модулями.
Пример SQL-запроса
Получить список всех включенных модулей с их версиями можно следующим запросом:
SELECT name, filename, info
FROM system
WHERE type = 'module' AND status = 1
ORDER BY weight ASC, name ASC;
Просмотреть информацию о необходимых обновлениях для модулей:
SELECT name, schema_version, filename
FROM system
WHERE type = 'module' AND schema_version > 0;