Страница 1 из 9

[Разработчикам] Конструктор модулей

Добавлено: Пн дек 21, 2015 10:39 pm
sergejey
По адресу https://mjdm.ru/mbuilder/ запустил новый инструмент -- генератор заготовок для модулей MajorDoMo.

(все способы кастомизации системы в статье)

Изображение

Этот инструмент предназначен для быстрого создания "скелета" нового модуля. Созданная заготовка полностью рабочая и может быть сразу установлена в систему (после скачивания и распаковки). В дальнейшем разработчик её "допиливает" под свои потребности (используя PHP), но львиная часть типовых задач будет уже решена и можно сосредоточиться на логике работы модуля.

Основные возможности:
* Создание скелета модуля с указанием основных данных (название, категория)
* Создание интерфейса работы с данными (таблица первого уровня + [опционально] таблица второго уровня)
* Заготовка для обработчика команды SAY (для кастомных визуализаций уведомлений и синтезаторов речи)
* Заготовка для цикла модуля

Рядом с большинством полей есть значок вопроса, по которому можно получить больше информации о настройках.

Программирования этот инструмент не отменяет, но значительно сокращает время на рутину.

Re: Помощник создания модулей для MajorDoMo

Добавлено: Пт янв 29, 2016 10:36 am
nick7zmail
Вот это шикарная штука...надо дома по-эксперементировать.

Re: Помощник создания модулей для MajorDoMo

Добавлено: Вт фев 02, 2016 10:28 pm
BrainRoot
Ага, согласен.

Re: Помощник создания модулей для MajorDoMo

Добавлено: Пт фев 05, 2016 9:36 pm
Alien
Не знаю во всех ли выдачах помощника такое, но у меня случилось - не было сохранения датасорса. Пока Сергей не поправил обратите внимание на основной класс.

Код: Выделить всё

function saveParams($data=0) {
 $p=array();
 if (IsSet($this->id)) {
  $p["id"]=$this->id;
 }
 if (IsSet($this->data_source)) {
  $p["data_source"]=$this->data_source;
 }
 if (IsSet($this->view_mode)) {
  $p["view_mode"]=$this->view_mode;
 }
 if (IsSet($this->edit_mode)) {
  $p["edit_mode"]=$this->edit_mode;
 }
 if (IsSet($this->tab)) {
  $p["tab"]=$this->tab;
 }
 return parent::saveParams($p);
}
И в функции function getParams() соответственно.

PS Протестировал помощника еще раз. Если сразу указывать две таблицы, то все нормально. Так что вопрос касается только развития модуля от одного датасета к нескольким. Нужно не забыть про описанное выше ;)

Re: Помощник создания модулей для MajorDoMo

Добавлено: Ср мар 16, 2016 8:09 pm
nick7zmail
Небольшой вопросик - а можно несколько полей таблицы связать с несколькими свойствами объектов? Или как вообще связывание происходит? И каким образом работает? При изменении связанного свойства запускается какой либо код?

Re: Помощник создания модулей для MajorDoMo

Добавлено: Чт мар 17, 2016 9:58 am
Alien
Вообще-то это бланк. Главная его функция - избавиться от написания кода по поддержке модуля.
Основной костяк задается сразу, а потом уже в загруженных файлах смотреть пример и по аналогии дописывать что нужно в класс и темплейты.
Запускать, не запускать и что запускать решаете Вы - разработчик ;)
Возможно практически все, но зависит от желаемого результата, а с конкретным вопросом по конкретной реализации хотелки можно в личку или, еще лучше, в соответствующей ветке форума создать тему о разрабатываемом модуле и уже в нем вести вопрос.
Модулей нужно много хороших и разных :)

Re: Помощник создания модулей для MajorDoMo

Добавлено: Чт мар 17, 2016 10:10 am
nick7zmail
Alien писал(а):Вообще-то это бланк. Главная его функция - избавиться от написания кода по поддержке модуля.
Основной костяк задается сразу, а потом уже в загруженных файлах смотреть пример и по аналогии дописывать что нужно в класс и темплейты.
Запускать, не запускать и что запускать решаете Вы - разработчик ;)
Я в курсе что это бланк...первые модули писал, когда еще не было этого помощника))...с ним гораздо проще...особенно с таблицами в базе. Просто интересно было конкретно про привязку...как с несколькими свойствами связать вроде разобрался...сейчас пытаюсь понять - как модуль должен (и должен ли) откликаться на изменение связанных свойств...и какой кусок кода за это отвечает...

А на счет "создать тему" - тему создавать по модулю можно, когда он уже готов)) Сырой глючный и т.п. - врят ли кто тестировать даже возьмется, не то что уж помогать)...

Кстати, Сергей...хз - у меня такой глюк, или вообще с билдером - но когда название модуля на русском вписываешь - результат выдаётся в корявой кодировке (сейчас не могу посмотреть конкретно какой)....

Re: Помощник создания модулей для MajorDoMo

Добавлено: Чт мар 17, 2016 10:25 am
Alien
Видимо сам php файл не в UTF, а в кириллице, оттуда и кракозябры вылазят.
Чтобы модуль откликался на связанные свойства, я так думаю, нужно создать цикл с проверкой этих свойств с какой-то периодичностью. Затем уже из цикла запускать необходимые связанные методы.
А по сырости - это Вы зря. "Гуртом і батька легше бити", есть такая поговорка. Создать тему можно и под сырое. Если тема интересна, то будут комментарии, хотелки, а возможно и помощь.

Re: Помощник создания модулей для MajorDoMo

Добавлено: Ср июн 22, 2016 1:54 pm
nick7zmail
Сергей...небольшой вопросик про механизм связывания параметров со свойствами объектов. (Возможно повторяюсь, просто переформулировал)

Можно по-подробнее узнать механизм связывания? Как система понимает, что свойство связано с каким-либо модулем? У этого свойства какие-то привязки прописываются в sql прямо? Или модуль "подписывается" как то на изменение этого свойства?

Чтоб была понятнее суть вопроса - цель - к записи (в модуле) прицепить 1 объект, 2 свойства и 1 метод. Нужно, чтобы модуль реагировал на изменения обоих свойств...

Re: Помощник создания модулей для MajorDoMo

Добавлено: Ср июн 22, 2016 2:18 pm
sergejey
nick7zmail писал(а):Сергей...небольшой вопросик про механизм связывания параметров со свойствами объектов. (Возможно повторяюсь, просто переформулировал)
Можно по-подробнее узнать механизм связывания? Как система понимает, что свойство связано с каким-либо модулем? У этого свойства какие-то привязки прописываются в sql прямо? Или модуль "подписывается" как то на изменение этого свойства?
Чтоб была понятнее суть вопроса - цель - к записи (в модуле) прицепить 1 объект, 2 свойства и 1 метод. Нужно, чтобы модуль реагировал на изменения обоих свойств...
Есть функция
addLinkedProperty("ObjectName", "PropertyName", "ModuleName");
По сути она добавляет через запятую название модуля в поле LINKED_MODULES записи значения свойства (таблица pvalues). Соответственно, система знает, что надо обратиться к данному модулю при изменении свойства. Обращение происходит через вызов метода propertySetHandle("ObjectName", "PropertyName", $value) соответствующего модуля (в модуль этот метод должен быть добавлен в код). Ну а пример реализации обработки вызова можно посмотреть практически в любом "железном" модуле. Простой пример:

Код: Выделить всё

 function propertySetHandle($object, $property, $value) {
   $commands=SQLSelect("SELECT noocommands.*, noodevices.ADDRESS, noodevices.SCENARIO_ADDRESS FROM noocommands LEFT JOIN noodevices ON noocommands.DEVICE_ID=noodevices.ID WHERE LINKED_OBJECT LIKE '".DBSafe($object)."' AND LINKED_PROPERTY LIKE '".DBSafe($property)."'");
   DebMes("nooCommand: $object.$property");
   $total=count($commands);
   if ($total) {
    for($i=0;$i<$total;$i++) {
      //отправляем команду в "железяку"
    }
   }
 }