24.2. Создание переносимого модуля
Переносимый модуль — это ZIP-архив, который содержит следующие составляющие:
1. Собственно все файлы модуля (структура директориев соответствует структуре директориев сайта).
2. Файл module.ini, который содержит информацию о модуле: название, версия, типы виджетов, типы пунктов меню, группы прав доступа.
3. Файлы (если требуется) install.mysql.sql и install.sqlite.sql — содержат SQL-инструкции инициализации базы данных для соответствующей СУБД. Создаваемые таблицы отслеживаются и при удалении модуля будут разрушены автоматически.
4. Файл install.php (если требуется), содержащий скрипты, которые необходимо выполнить перед установкой модуля (installBefore) и после установки (installAfter).
5. Файл uninstall.php (если требуется), содержащий скрипты, которые необходимо выполнить перед удалением (uninstallBefore) и после удаления (uninstallAfter) модуля.
При установке модуля система автоматически настраивает обработчики событий исходя из наличия файлов в директориях /hook и /admin/hook.
Чтобы создать переносимый модуль, необходимо перед началом работы создать снимок состояния системы в «инструменты разработчика». После того, как модуль будет готов (этапы описаны в предыдущем разделе), необходимо вновь перейти на страницу «инструменты разработчика» и на вкладке «снимок движка» нажать кнопку «сравнить».
Система отобразит все сделанные изменения, а также создаст шаблон модуля. Теперь необходимо зарегистрировать в системе уже установленный модуль так, как это описано в диалоговом окне. А именно: добавить информацию о модуле в файл /admin/config/_module.php и сохранить предложенный файл в /admin/module/ИМЯ_МОДУЛЯ.php.
Теперь модуль корректно установлен. Чтобы создать переносимую версию, нужно вновь открыть «инструменты разработчика», перейти на вкладку «модуль» и выполнить экспорт только что созданного модуля. Остаётся только добавить файлы install.mysql.sql и install.sqlite.sql (если требуется), которые содержат SQL-инструкции инициализации СУБД, скрипт install.php (если требуется), который может содержать функции installBefore($version), installAfter($version), uninstallBefore() и uninstallAfter($version).
Функции со словом «before» выполняются до установки или удаления модуля — они должны проверить возможность установки/удаления и вернуть true, если установка/удаление возможно и false в противном случае. Процедуры со словом «after» вызываются после установки/удаления и позволяют провести дополнительные настройки и удаление «мусора». Параметр $version содержит версию модуля в том случае, если модуль уже был ранее установлен (нужно провести не установку, а обновление). Если модуль устанавливается впервые, то этот параметр будет содержать null. В функции uninstallAfter() параметр $version будет содержать номер версии только в том случае, если в процессе установки новой версии модуля произошёл какой-то сбой и сейчас принимается попытка отменить установку.
Обратите внимание на файлы install.mysql.sql и install.sqlite.sql: инструкции в этих файлах будут выполнены только при первичной установке модуля.
Файлы локализации (находящиеся в директории /language) обычно выделяются в отдельный модуль, у которого в конфигурационном файле которого, в параметре depend, указывается имя и версия «основного» модуля.