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

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

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

Сообщение sergejey » Пн дек 21, 2015 10:39 pm

По адресу https://mjdm.ru/mbuilder/ запустил новый инструмент -- генератор заготовок для модулей MajorDoMo.

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

Изображение

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

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

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

Программирования этот инструмент не отменяет, но значительно сокращает время на рутину.
За это сообщение автора sergejey поблагодарили (всего 12):
skysilver (Ср дек 23, 2015 10:27 am) • Alien (Ср дек 23, 2015 6:01 pm) • nick7zmail (Пт янв 29, 2016 10:36 am) • samum (Пт янв 29, 2016 11:46 am) • Kod.Begemot (Вт фев 02, 2016 10:59 pm) • ErmolenkoM (Ср фев 03, 2016 9:44 am) • Otto (Пт апр 29, 2016 8:18 am) • Bagir (Пт фев 10, 2017 9:41 pm) • zelevova (Сб апр 15, 2017 2:04 pm) • foxvlad (Сб мар 17, 2018 5:07 pm) и ещё 2
Рейтинг: 13.95%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пт янв 29, 2016 10:36 am

Вот это шикарная штука...надо дома по-эксперементировать.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
BrainRoot
Сообщения: 4
Зарегистрирован: Ср янв 13, 2016 3:47 pm
Благодарил (а): 0
Поблагодарили: 0

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

Сообщение BrainRoot » Вт фев 02, 2016 10:28 pm

Ага, согласен.
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

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

Сообщение Alien » Пт фев 05, 2016 9:36 pm

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

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

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 Протестировал помощника еще раз. Если сразу указывать две таблицы, то все нормально. Так что вопрос касается только развития модуля от одного датасета к нескольким. Нужно не забыть про описанное выше ;)
Ubuntu на Banana pi M2U Connect
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Ср мар 16, 2016 8:09 pm

Небольшой вопросик - а можно несколько полей таблицы связать с несколькими свойствами объектов? Или как вообще связывание происходит? И каким образом работает? При изменении связанного свойства запускается какой либо код?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

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

Сообщение Alien » Чт мар 17, 2016 9:58 am

Вообще-то это бланк. Главная его функция - избавиться от написания кода по поддержке модуля.
Основной костяк задается сразу, а потом уже в загруженных файлах смотреть пример и по аналогии дописывать что нужно в класс и темплейты.
Запускать, не запускать и что запускать решаете Вы - разработчик ;)
Возможно практически все, но зависит от желаемого результата, а с конкретным вопросом по конкретной реализации хотелки можно в личку или, еще лучше, в соответствующей ветке форума создать тему о разрабатываемом модуле и уже в нем вести вопрос.
Модулей нужно много хороших и разных :)
Ubuntu на Banana pi M2U Connect
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Чт мар 17, 2016 10:10 am

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

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

Кстати, Сергей...хз - у меня такой глюк, или вообще с билдером - но когда название модуля на русском вписываешь - результат выдаётся в корявой кодировке (сейчас не могу посмотреть конкретно какой)....
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alien
Сообщения: 191
Зарегистрирован: Пт дек 20, 2013 4:46 pm
Благодарил (а): 72 раза
Поблагодарили: 38 раз

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

Сообщение Alien » Чт мар 17, 2016 10:25 am

Видимо сам php файл не в UTF, а в кириллице, оттуда и кракозябры вылазят.
Чтобы модуль откликался на связанные свойства, я так думаю, нужно создать цикл с проверкой этих свойств с какой-то периодичностью. Затем уже из цикла запускать необходимые связанные методы.
А по сырости - это Вы зря. "Гуртом і батька легше бити", есть такая поговорка. Создать тему можно и под сырое. Если тема интересна, то будут комментарии, хотелки, а возможно и помощь.
Ubuntu на Banana pi M2U Connect
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Ср июн 22, 2016 1:54 pm

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

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

Чтоб была понятнее суть вопроса - цель - к записи (в модуле) прицепить 1 объект, 2 свойства и 1 метод. Нужно, чтобы модуль реагировал на изменения обоих свойств...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

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

Сообщение sergejey » Ср июн 22, 2016 2:18 pm

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++) {
      //отправляем команду в "железяку"
    }
   }
 } 
За это сообщение автора sergejey поблагодарил:
nick7zmail (Ср июн 22, 2016 2:34 pm)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ответить