Страница 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 мне не понятно.
я же под кодом это написал, не прочитал?