Страница 2 из 5
Re: Программно инициализировать метод
Добавлено: Пн дек 04, 2017 8:23 pm
Gelezako
не, с SQL я так и не разобрался, тут пока заставил готовый addClassMethod работать пол дня прошло. Сори, работаю над несколькими задачами и не прочитал предыдущие посты где ты действительно всё расписал про него. Я первый раз попробовал - не заработало, переключился на другую задачу и потом уже через поиск сам снова нашёл пример с addClassMethod() и потом заработало

В общем тупо получилось.
А на счёт привязки, я не понял почему ты считаешь что это неправильно из модуля делать? Я рассуждаю так: юзер скачал модуль и автоматически получил работающий функционал. Откуда он знает что к чему надо привязывать? Что бы это понять надо кучу мануала перечитать. А так он получает работающий функционал сразу.
И я не понял фразу "связывайте лучше свойство с модулем вашим". Как это выглядит?
Re: Программно инициализировать метод
Добавлено: Пн дек 04, 2017 8:43 pm
nick7zmail
И я не понял фразу "связывайте лучше свойство с модулем вашим". Как это выглядит?
Так во всех модулях делается...функция
Код: Выделить всё
addLinkedProperty(объект, свойство, имя_модуля);
привязывает модуль к изменению определенного свойства...когда свойство меняется - вызывается функция, описанная в основном классе модуля
Код: Выделить всё
function propertySetHandle($object, $property, $value)
И в ней делайте, что хотите. И это, кстати, практически единственный вариант не связываться с sql, а работать с объектами, методами при изменении свойств.
А пользователю можно просто оставить создание простого устройства прямо из модуля.
Re: Программно инициализировать метод
Добавлено: Пт апр 20, 2018 8:44 am
directman66
И все же, как привязать вызов метода при изменении свойства объекта? Вручную это сделать можно через интерфейс легко, но как привязать при создании объекта плагином?
Re: Программно инициализировать метод
Добавлено: Пт апр 20, 2018 2:52 pm
Gelezako
directman66 писал(а): Пт апр 20, 2018 8:44 am
И все же, как привязать вызов метода при изменении свойства объекта? Вручную это сделать можно через интерфейс легко, но как привязать при создании объекта плагином?
Код: Выделить всё
$prop_id=addClassProperty('Yeelight', 'status', 0);
if ($prop_id) {
$property=SQLSelectOne("SELECT * FROM properties WHERE ID=".$prop_id);
$property['ONCHANGE']='on_off'; // <-----------
SQLUpdate('properties',$property);
}
выделил строчку стрелочкой, 'on_off' - название метода который будет вызываться
Re: Программно инициализировать метод
Добавлено: Пт апр 20, 2018 3:12 pm
nick7zmail
Ну, собственно, как я и говорил. Напрямую через sql.
Re: Программно инициализировать метод
Добавлено: Пт апр 20, 2018 3:17 pm
Gelezako
nick7zmail писал(а): Пт апр 20, 2018 3:12 pm
Ну, собственно, как я и говорил. Напрямую через sql.
nick7zmail, а у тебя нет понимания как самому клепать "встроенные функции", типа setGlobal, getGlobal итд? Можно было бы сделать функцию линковки метода к свойству, рас он так популярен.
Re: Программно инициализировать метод
Добавлено: Пт апр 20, 2018 3:30 pm
directman66
Чето не взлетает
Код: Выделить всё
addClass('livegpstracks'); // Создаем класс
addClassMethod('livegpstracks','ONCHANGE','SQLUpdate(\'objects\', array("ID"=>$this->id, "DESCRIPTION"=>$this->getProperty("title").\' \'.gg(\'sysdate\').\' \'.gg(\'timenow\'))); ');
//addClassProperty('livegpstracks','t');
addClassProperty('livegpstracks','d');
$prop_id=addClassProperty('livegpstracks', 't', 0);
if ($prop_id) {
$property=SQLSelectOne("SELECT * FROM properties WHERE ID=".$prop_id);
$property['ONCHANGE']='on_off'; // <-----------
SQLUpdate('properties',$property);
}
И что такое on_off мне не понятно.
Re: Программно инициализировать метод
Добавлено: Пт апр 20, 2018 3:36 pm
nick7zmail
Gelezako писал(а):nick7zmail писал(а): Пт апр 20, 2018 3:12 pm
Ну, собственно, как я и говорил. Напрямую через sql.
nick7zmail, а у тебя нет понимания как самому клепать "встроенные функции", типа setGlobal, getGlobal итд? Можно было бы сделать функцию линковки метода к свойству, рас он так популярен.
Да в принципе есть...идём в /lib/objects.class.php и дописываем по-аналогии с другими функциями. Только надо чётко определить что вы на входе хотите, что на выходе. При желании можно доработать addclassproperty, чтобы onchange заполнил если будет указан какой либо параметр.
Отправлено с моего Xperia XZ1 Compact через Tapatalk
Re: Программно инициализировать метод
Добавлено: Пт апр 20, 2018 3:37 pm
directman66
Ура, взлетело
Код: Выделить всё
*/
addClass('livegpstracks'); // Создаем класс
addClassMethod('livegpstracks','update','SQLUpdate(\'objects\', array("ID"=>$this->id, "DESCRIPTION"=>$this->getProperty("title").\' \'.gg(\'sysdate\').\' \'.gg(\'timenow\'))); ');
//addClassProperty('livegpstracks','t');
addClassProperty('livegpstracks','d');
$prop_id=addClassProperty('livegpstracks', 't', 0);
if ($prop_id) {
$property=SQLSelectOne("SELECT * FROM properties WHERE ID=".$prop_id);
$property['ONCHANGE']='update'; // <-----------
SQLUpdate('properties',$property);
}
Re: Программно инициализировать метод
Добавлено: Пт апр 20, 2018 3:38 pm
Gelezako
directman66 писал(а): Пт апр 20, 2018 3:30 pm
Чето не взлетает
а само свойство "t" создаётся? И ещё, предлагаю свойствам давать более говорящие имена.
directman66 писал(а): Пт апр 20, 2018 3:30 pm
И что такое on_off мне не понятно.
я же под кодом это написал, не прочитал?