Программно инициализировать метод
Модератор: immortal
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Программно инициализировать метод
Всем привет, пишу модуль, нужно вставить готовый код в метод класса. Нашёл только метод injectObjectMethodCode, но он вставляет сразу в объект класса.
И второй вопрос, как программно сделать аналог ручного выбора метода из разделе "Запускать метод при изменении"?
И второй вопрос, как программно сделать аналог ручного выбора метода из разделе "Запускать метод при изменении"?
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
-
- Сообщения: 3006
- Зарегистрирован: Чт авг 21, 2014 8:28 am
- Откуда: Киров, Россия
- Благодарил (а): 400 раз
- Поблагодарили: 1753 раза
- Контактная информация:
Re: Программно инициализировать метод
Имхо, неверным путём пошёл. Надо сделать также как в модулях сяоми, броадлинк и др., где у каждого девайса своя табличка с параметрами девайса, и к этим параметрам пользователь сам привязывает нужный ему метод или свойство объекта, либо вообще простое устройство.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Мой CONNECT | Блоги | Telegram
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Re: Программно инициализировать метод
ага, легко сказать, это первое что мне пришло в голову. Я скопировал модуль сяоми и начал разбираться в коде, но там для меня полный космос. Поэтому пока делаю что умею.
Вопрос открытый.
Вопрос открытый.
Последний раз редактировалось Gelezako Сб дек 02, 2017 1:21 am, всего редактировалось 1 раз.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Программно инициализировать метод
Запускать метод при изменении - просто привязка в табличке (не помню имя, properties вроде)...код класса, в принципе тоже...да вообще весь МД это по сути поля в sql =D. Работайте с sql напрямую. Либо ещё раз поизучайте модули...сяоми наверное неподъемный, как, собственно, к примеру, бродлинк...можете глянуть на что нить простенькое...blynk к примеру...вроде то что вам нужно...как раз работа с таблицей устройств, и таблицей данных, а так же запуск кода при изменении свойства. Там всё вроде просто...возникнут вопросы - отвечу.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Re: Программно инициализировать метод
да я понимаю что всё храниться в базе, но опыта работы с базой у меня ещё меньше чем в пхп
Сергей достаточно много написал стандартных обёрток что бы не использовать SQL напрямую. Я почти уверен что есть специальный метод для инициализации метода (наполнение его нужным кодом) по типу injectObjectMethodCode.
nick7zmail, если вы знаете как добавить наполнение кодом моего метода, то подскажите плиз. Ну или SQL команду, которая это сделает, или линку где это описано. Доку изучить не проблема, проблема найти где это описано.
Сергей достаточно много написал стандартных обёрток что бы не использовать SQL напрямую. Я почти уверен что есть специальный метод для инициализации метода (наполнение его нужным кодом) по типу injectObjectMethodCode.
nick7zmail, если вы знаете как добавить наполнение кодом моего метода, то подскажите плиз. Ну или SQL команду, которая это сделает, или линку где это описано. Доку изучить не проблема, проблема найти где это описано.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Программно инициализировать метод
Ну видимо недостаточно)))
https://majordomo.smartliving.ru/Main/P ... ngDatabase
вот тут все функции работы с базой...
И в написанных оболочках я не находил некоторого функционала, и приходилось всё равно через базу делать...
Например не нашел, вроде как объект добавлять, или описание к нему...короче приходилось в базу напрямую лезть
ИМХО - уже подсказали, что у вас путь не правильный выбран...весь код должен быть в файлах вашего модуля, а инфа в таблицах...в объекты-свойства выкидывать только статусы лампочек, и другие нужные для управления параметры. Я уже привел простейший модуль (blynk) где помимо нужных вам функций практически ничего больше и нет...Я готов всячески помочь написать правильный модуль, подсказать по таблицам и тп...а вот когда делают неправильно - считаю своим долгом предупредить, и изменить мнение, если это возможно...если ваш код покоцает пользователь в методах - не будет ничего работать, а разбираться потом Вам))
Ну и так...для сведения
В том же модуле =D...но тут опять же, как можно заметить, ссылка на основной код в модуле...
https://majordomo.smartliving.ru/Main/P ... ngDatabase
вот тут все функции работы с базой...
И в написанных оболочках я не находил некоторого функционала, и приходилось всё равно через базу делать...
Например не нашел, вроде как объект добавлять, или описание к нему...короче приходилось в базу напрямую лезть
примерПоказать
Код: Выделить всё
$className = 'ya_traffic';
$objectName = array('yt_settings', 'yt_info');
$objDescription = array('Настройки', 'Информация о пробках');
/*$updCode = ;*/
$rec = SQLSelectOne("SELECT ID FROM classes WHERE TITLE LIKE '" . DBSafe($className) . "'");
if (!$rec['ID']) {
$rec = array();
$rec['TITLE'] = $className;
$rec['DESCRIPTION'] = 'Пробки от Яндекс';
$rec['ID'] = SQLInsert('classes', $rec);
}
for ($i = 0; $i < count($objectName); $i++) {
$obj_rec = SQLSelectOne("SELECT ID FROM objects WHERE CLASS_ID='" . $rec['ID'] . "' AND TITLE LIKE '" . DBSafe($objectName[$i]) . "'");
if (!$obj_rec['ID']) {
$obj_rec = array();
$obj_rec['CLASS_ID'] = $rec['ID'];
$obj_rec['TITLE'] = $objectName[$i];
$obj_rec['DESCRIPTION'] = $objDescription[$i];
$obj_rec['ID'] = SQLInsert('objects', $obj_rec);
}
}
Ну и так...для сведения
Код: Выделить всё
addClassMethod('ya_traffic', 'update', 'include_once(DIR_MODULES."app_yatraffic/app_yatraffic.class.php");
$app_yatraffic=new app_yatraffic();
$app_yatraffic->get_traffic(gg("yt_settings.reg_id"));');
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Re: Программно инициализировать метод
я согласен что есть риск если пользователь начнёт менять код, то он может всё поломать, но на сколько я понял у Сергея в его новейшем модуле "Простые устройства" применяется похожая концепция. Хотя немного более защищённая если так можно выразится. Если через Простые устройства" добавить к примеру датчик движения, перейти в раздел "Объекты", найти этот датчик и посмотреть содержимое метода "motionDetected", то там есть вставкаnick7zmail писал(а): ИМХО - уже подсказали, что у вас путь не правильный выбран...весь код должен быть в файлах вашего модуля, а инфа в таблицах...в объекты-свойства выкидывать только статусы лампочек, и другие нужные для управления параметры. Я уже привел простейший модуль (blynk) где помимо нужных вам функций практически ничего больше и нет...Я готов всячески помочь написать правильный модуль, подсказать по таблицам и тп...а вот когда делают неправильно - считаю своим долгом предупредить, и изменить мнение, если это возможно...если ваш код покоцает пользователь в методах - не будет ничего работать, а разбираться потом Вам))
Ну и так...для сведенияВ том же модуле =D...но тут опять же, как можно заметить, ссылка на основной код в модуле...Код: Выделить всё
addClassMethod('ya_traffic', 'update', 'include_once(DIR_MODULES."app_yatraffic/app_yatraffic.class.php"); $app_yatraffic=new app_yatraffic(); $app_yatraffic->get_traffic(gg("yt_settings.reg_id"));');
Код: Выделить всё
require(DIR_MODULES.'devices/SMotions_motionDetected.php');
Вот я хочу сделать тоже самое. Сейчас копаюсь в коде модуля "Простые устройства" что бы понять как сделать такую вставку.
попробовал передавать в метод addClassMethod() качестве третье параметра нужный мне исходный код. Сам метод создаётся, но почему-то пустой. В чём может быть проблема?
---
В общем выяснил я в чём проблема. Оказывается если сначала создать метод и передать только 2 параметра: имя класса и название метода, то он создаётся. Но если потом пробовать создать метод с таким же именем, но уже передавать 3й параметр - исходный код, то он дописываться не будет. Получается если в обновление это дописать, то метод не перезапишется. В общем это победил, осталось понять как сделать аналог ручного выбора метода из разделе "Запускать метод при изменении.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Программно инициализировать метод
Тут скорее всего только в sql залезать прямо...я не видел встроенных команд для этого...
А в модуле простые устройства каждый раз при обновлении формируется дерево взаимосвязей объектов (вся классовая структура целиком), методов, и тп...и даже если код затронут - он восстановится при очередном обновлении, так что у него там не всё так просто))
А для создания класса есть отдельная команда
А в модуле простые устройства каждый раз при обновлении формируется дерево взаимосвязей объектов (вся классовая структура целиком), методов, и тп...и даже если код затронут - он восстановится при очередном обновлении, так что у него там не всё так просто))
А для создания класса есть отдельная команда
Код: Выделить всё
addClass($name);
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
- Gelezako
- Сообщения: 963
- Зарегистрирован: Чт июн 02, 2016 9:33 pm
- Благодарил (а): 205 раз
- Поблагодарили: 106 раз
- Контактная информация:
Re: Программно инициализировать метод
я разобрался, есть специальный метод, вотnick7zmail писал(а):Тут скорее всего только в sql залезать прямо...я не видел встроенных команд для этого...
Код: Выделить всё
addClassMethod('Yeelight', 'set_rgb',"require(DIR_MODULES.'Yeelight/Yeelight_set_rgb.php');");
set_rgb - метод.
А вот уже в файл Yeelight_set_rgb.php добавляем свою нужную нам логику. Протестил работает.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
- nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
- Благодарил (а): 121 раз
- Поблагодарили: 2010 раз
Re: Программно инициализировать метод
Ну этот пример я 3 сообщения назад показывал...
И ты вроде сказал, что понял...про sql я говорю о связывании свойства и метода...а вообще не совсем верно связывать свойство и метод из модуля...связывайте лучше свойство с модулем вашим, а из модуля вызывайте метод (и зачем из модуля, на самом деле, вызывать метод, если можно напрямую вызывать ваш файл)))...
И ты вроде сказал, что понял...про sql я говорю о связывании свойства и метода...а вообще не совсем верно связывать свойство и метод из модуля...связывайте лучше свойство с модулем вашим, а из модуля вызывайте метод (и зачем из модуля, на самом деле, вызывать метод, если можно напрямую вызывать ваш файл)))...
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<