Введение
MajorDoMo -- это очень гибкий инструмент, умелое использование возможностей которого открывает практически безграничные просторы для реализаций любых фантазий в области автоматизации жизнедеятельности. Уже имеющихся средств и вариантов настройки будет вполне достаточно для большинства пользователей, но, кроме этого, есть возможности для еще более глубокой модификации системы под собственные нужды. В этой статье я расскажу об основных способах расширения и модификации системы.
Для начала, базовые принципы. Система имеет открытый исходный код и можно открыть в текстовом редакторе любой из файлов ядра или модулей (обычно это файлы с расширениями php/html/css/js), внести изменения и сохранить. Изменения будут применены сразу же, так что результат правки не заставит себя ждать. Но такой вариант модификации не самый лучший, т.к. если вы планируете в дальнейшем использовать встроенный механизм обновлений, т.к. при установке обновлений система переписывает поверх все файлы, которые присутствуют в пакете обновлений. К примеру, вы внесли изменение в файл /templates/application.html, но в пакете обновлений ядра системе также есть файл /templates/application.html и ваш файл будет заменен без сохранения сделанных вами изменений. Таким образом, для сохранения возможности корректного обновления, любая модификация не должна производиться на тех файлах, которые включены в ядро системы (актуальный перечень файлов всегда можно найти на GitHub).
Следующим важным моментом является то, что те модификации, которые не связаны с изменением файлов, а проделаны через настройки в веб-интерфейсе панели управления, всегда сохраняются и не могут “исчезнуть” или “обнулиться” при обновлении системы. Это правило можно рассматривать и в качестве руководства для разработчиков, чтобы создаваемые ими модули и плагины всегда учитывали фактор первостепенности сохранения настроек пользователя.
Ниже перечислены основные направления по модификации системы.
Альтернативные шаблоны
За внешний вид элементов системы отвечает система html-шаблонов. Файлы шаблонов хранятся в папке /templates/ (и дочерних папках). Помимо стандартных HTML-конструкций в файлах применяются специальные инструкции шаблонизатора jTemplates (операторы вида [#if..#], [#inc ...#] и т.п.). Кроме того, стандартными средствами подключаются CSS-стили и JavaScript-модули. Правило модификации этих файлов довольно простое -- система смотрит наличие “альтернативного” файла в папке /templates_alt/ и если он там есть, то будет использоваться он, а не стандартный файл. Например, вы хотите внести изменение в файл /templates/textfiles/textfiles.html , скопируйте в новый расположив его по пути /templates_alt/textfiles/textfiles.html и вносите изменение там -- система будет его использовать вместо стандартного и даже при установке пакета обновлений ваш файл не будет изменен или удален.
Важное замечание: обновление ядра системы может включать новые функции или исправления, которые вы можете не увидеть, если задействовали альтернативный шаблон для того раздела системы, где эти новые функции представлены.
Модули
Большая часть функционала системы выполняется в отдельных модулях, из которых как из строительных блоков строится вся система. В большинстве случаев модули предназначены для организации взаимодействия системы с определенным оборудованием либо информационными сервисами. Модули устанавливаются в систему через Панель управления, раздел Система / Маркет дополнений -- там можно выбрать модуль из каталога либо загрузить модуль в виде архива. Каталог модулей доступен по ссылке. Вы можете создать собственный модуль, воспользовавшись более подробной информацией о структуре модуля (видео-урок), а так же инструментом быстрого создания основы модуля. Впоследствие вы можете упаковать ваш модуль в специальный архив или выложить на GitHub для дальнейшего распространения. Состав пакета модуля описан по ссылке.
Модификации
Модификации это по сути тот же пакет файлов, устанавливаемых в систему и требования к содержимому пакета точно такие же как к пакету модуля за исключением того, что в пакете модификации нет именно модуля и после установки пакета в Панели управления не появляется новый пункт меню. В каталоге дополнений для модификаций выделен отдельный раздел.
Иконки элементов сцен
В Сценах и в Простых устройствах есть возможность выбрать для элемента определенную иконку из доступных. Сами иконки расположены в подпапках /cms/scenes/styles/ -- вы можете свободно добавлять туда собственные иконки в формате .png и они станут доступны для выбора. Например, вы можете просто добавить иконку darkness.png, но вы также можете добавить два файла darkness_on.png и darkness_off.png и при использовании элемента типа выключатель будут автоматически задействованы разные файлы для состояния “включено” и “выключено”.
Библиотеки PHP-функций
PHP-файл, положенный в папку /lib/ будет загружаться автоматически. Вы можете создать собственный уникальный php-файл, положить его в папку /lib/ и прописанные в нём функции автоматически становятся доступны в любом из ваших сценариев. Для корректной работы этого механизма имеет смысл перезагрузить систему, чтобы ваша библиотека “подхватилась” всеми фоновыми процессами.
Новые типы плееров
Для отдельных терминалов можно настроить тип плеера, который используется для проигрывания контента. Так вот, если положить свой php-файл в папку /modules/app_player/addons/, то в настройках терминала появится новый тип плеера, соответствующий имени файла. В своём файле необходимо реализовать обработчик запросов на проигрывание медиа-контента по примерам уже добавленных файлов.
Новые типы Простых Устройств
Имеющийся в системе набор Простых Устройств может быть расширен за счет создания файлов описаний в папке /modules/devices/addons/. Подробнее про формат файлов по ссылке.