Значение элемента меню без линка со свойством объека
Модератор: immortal
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Значение элемента меню без линка со свойством объека
Предлагаю обсудить целесообразность получения и изменения значения элемента меню без линка со свойством объекта. Сразу небольшой пример. Есть два разных скрипта и один радио переключатель с двумя кнопками. Задача: при нажатии кнопки 1 запустить скрипт А, при нажатии кнопки 2 запустить скрипт Б. После запуска скрипта нужно отжать кнопку радио переключателя, чтобы не было вообще ничего нажато.
Эта задача решается очень просто, если слинковать свойство радио переключателя с каким нибудь объектом. Но вот в чем дело. Этого объекта у нас нет. Конечно можно создать новое свойство например у объекта ThisComputer. Но по условию задачи больше свойство этого радио переключателя нам нигде не понадобится. Нужно просто запустить скрипт (или Объект.Метод) и на этом все.
В настройках элемента радио переключатель есть поле КОД. Если там прописать небольшое условие, то от туда можно вполне удобно запустить нужный скрипт. Но как там получить значение нажатой кнопки радио переключателя?
Вопрос знатокам: Есть ли способ получения свойства элемента в поле КОД? Если нет, то имеет ли смысл дернуть его из базы данных?
Эта задача решается очень просто, если слинковать свойство радио переключателя с каким нибудь объектом. Но вот в чем дело. Этого объекта у нас нет. Конечно можно создать новое свойство например у объекта ThisComputer. Но по условию задачи больше свойство этого радио переключателя нам нигде не понадобится. Нужно просто запустить скрипт (или Объект.Метод) и на этом все.
В настройках элемента радио переключатель есть поле КОД. Если там прописать небольшое условие, то от туда можно вполне удобно запустить нужный скрипт. Но как там получить значение нажатой кнопки радио переключателя?
Вопрос знатокам: Есть ли способ получения свойства элемента в поле КОД? Если нет, то имеет ли смысл дернуть его из базы данных?
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Значение элемента меню без линка со свойством объека
в коде можно использовать $params['VALUE'] -- оно будет хранить текущее значение переключателя
- Рейтинг: 1.16%
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Значение элемента меню без линка со свойством объека
Получилось! добыть значение переключателя $params['VALUE'].
Но изменить его не могу. Хочется в этом же коде прописать его сброс по таймеру, чтобы кнопка отжалась. Есть простой способ? а то я уже к таблице commands клинья начал подбивать ))
Но изменить его не могу. Хочется в этом же коде прописать его сброс по таймеру, чтобы кнопка отжалась. Есть простой способ? а то я уже к таблице commands клинья начал подбивать ))
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Значение элемента меню без линка со свойством объека
Простого боюсь, что нет. Можно поменять значение на самом деле через commands таким кодом:Bagir писал(а):Получилось! добыть значение переключателя $params['VALUE'].
Но изменить его не могу. Хочется в этом же коде прописать его сброс по таймеру, чтобы кнопка отжалась. Есть простой способ? а то я уже к таблице commands клинья начал подбивать ))
Код: Выделить всё
SQLExec("UPDATE commands SET CUR_VALUE=1 WHERE ID=12345");
- Рейтинг: 1.16%
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Значение элемента меню без линка со свойством объека
Спасибо Серёж! Так то SQLExec уже совсем не пугает. Не страшнее CSS )) Тем более ID мы видим сразу вверху и даже в phpmyadmin лезть не придется.
Просто я часто лазаю через окно не видя двери, вот и поинтересовался. В любом случае $params['VALUE'] очень хорошая находка для меня. Не всегда же нужно кнопки отжимать.
Хочу таким способом сэкономить немного места в меню для терминала, объединив кнопки родственных действий в один радио переключатель.
-----------------
Все отлично получилось!
Просто я часто лазаю через окно не видя двери, вот и поинтересовался. В любом случае $params['VALUE'] очень хорошая находка для меня. Не всегда же нужно кнопки отжимать.
Хочу таким способом сэкономить немного места в меню для терминала, объединив кнопки родственных действий в один радио переключатель.
-----------------
Все отлично получилось!
Код: Выделить всё
// По значению свойства кнопки открывать нужную дверь
switch ($params['VALUE']) {
case 1: callMethod('RelayFrontDoorOpen.click'); break;
case 2: callMethod('RelayBlackDoorOpen.click'); break;
}
// Сбросить свойство на NULL
SQLExec("UPDATE commands SET CUR_VALUE=NULL WHERE ID=172");
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Значение элемента меню без линка со свойством объека
Ну вот. Мне еще раз пригодилась эта фишка. Допустим есть радио переключатель Выкл-Авто-Вкл. В положении Авто реле принимает решения в зависимости от других событий в системе. Но!sergejey писал(а):в коде можно использовать $params['VALUE'] -- оно будет хранить текущее значение переключателя
Допустим для сравнения у нас есть еще вот такая простая схема с обычным элементом "выключатель". К ней привязана логика, например, датчика движения. Челочек идет, свет включается, потом счет гаснет. В то же время, мы можем и сами включить или раньше выключить свет в меню. Но в этом варианте все равно он будет в автоматическом режиме. Мы просто влияем на его работу.
Радио переключатель Выкл-Авто-Вкл. позволяет явно задать нам варианты работы реле. В положении Выкл реле никогда не включится, какие бы события не происходили. Это будет полезно если мы захотим поменять лампочку или поработать с проводкой. В положении Вкл реле будет всегда замкнуто. Это тоже весьма полезно в некоторых случаях, когда в этой комнате не нужно длительное время выключать свет. В положении Авто реле подчиняется логике. Все бы хорошо, но мы потеряли возможность повлиять на работу реле. Как же нам, будучи в режиме Авто, например включить или выключить свет до наступления будущих логических событий? Да очень просто! Жать на кнопку Авто несколько раз. Каждое следующее нажатие будет инвертировать состояние реле, но не изменит выбранный режим работы (т.е. Авто).
Суть в том, что даже если у нас уже выбрано какое то положение радио переключателя, то повторное нажатие на эту кнопку все равно создает событие, и запускает все указанные действия. Да, стандартные варианты тут не помогут. Но у нас же есть код! И есть $params['VALUE'], в которой содержится текущее значение переключателя. Значит нам нужно перед присвоением этого значения свойству объекта, просто с начало сравнить его с ним, а потом уже присваивать.
Надеюсь, что я донес до Вас зерно этой идеи )) Вот код моего радио переключателя. Если я смог правильно объяснить идею, то код тоже будет понятен. Имена объектов тут совершенно не важны. Главное только последовательность действий.
Код: Выделить всё
if (gg('RelayProjectorsDriveway.modeSwitch') == $params['VALUE']) {
$ws = 'меню';
} else { $ws = NULL; }
sg('RelayProjectorsDriveway.modeSwitch', $params['VALUE']);
cm('RelayProjectorsDriveway.sendMessage', array('whosent'=>$ws));
СкринПоказать
Вообщем я добавил эту фишку во все свои такие переключатели освещения. А новая доработка выделения кнопки цветом при включенном реле пришлась тут как нельзя к стати! Еще раз огромное спасибо Сергею за реализацию этих двух дополнений!
- Рейтинг: 1.16%
-
- Сообщения: 291
- Зарегистрирован: Вт ноя 18, 2014 11:43 pm
- Откуда: Краснодарский край
- Благодарил (а): 32 раза
- Поблагодарили: 68 раз
Re: Значение элемента меню без линка со свойством объека
Отличная фишка. Только что у себя реализовал.
Только код не писал в элементе. Я указал метод который нужно вызывать у объекта, а в нем уже анализировал $params['VALUE'] и и реализовывал остальную логику.
Только код не писал в элементе. Я указал метод который нужно вызывать у объекта, а в нем уже анализировал $params['VALUE'] и и реализовывал остальную логику.
- Рейтинг: 1.16%
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
CONNECT: http://connect.smartliving.ru/profile/311
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Значение элемента меню без линка со свойством объека
Ответное спасибо! Тоже попробую. Конечно, когда код логики работы реле находится в одном месте это большой плюс.
----------------------
Вот еще вариант чтобы не создавать у объекта реле вспомогательное свойство:
В коде переключателя пишем
В методе sendMessage у меня вся логика работы реле.
modeSwitch - режим работы радио переключателя.
'whosent'=>'меню' - идентификатор, что метод sendMessage был вызван из меню
А в методе sendMessage вот этот код обрабатывает присланное сообщение
----------------------
Вот еще вариант чтобы не создавать у объекта реле вспомогательное свойство:
В коде переключателя пишем
Код: Выделить всё
cm('RelayHallLight2.sendMessage', array('whosent'=>'меню','modeSwitch'=>$params['VALUE']) );
modeSwitch - режим работы радио переключателя.
'whosent'=>'меню' - идентификатор, что метод sendMessage был вызван из меню
А в методе sendMessage вот этот код обрабатывает присланное сообщение
Код: Выделить всё
switch ($params['whosent']) {
case 'меню': // вызывает Меню при нажатии на радио переключатель
//Если повторное нажатие на кнопку
if ($params['modeSwitch'] == $this->getProperty("modeSwitch")) {
// Если режим Авто
if ($params['modeSwitch'] == 1) {
//Инвертируем текущий статус реле
$f = !($this->getProperty("status"));
}
} else {
//Присвоить новый режим свойству
$this->setProperty("modeSwitch", $params['modeSwitch']);
}
break;
...
-
- Сообщения: 291
- Зарегистрирован: Вт ноя 18, 2014 11:43 pm
- Откуда: Краснодарский край
- Благодарил (а): 32 раза
- Поблагодарили: 68 раз
Re: Значение элемента меню без линка со свойством объека
Вот тут косяк потому как в методе значение $params['VALUE'] уже совпадает с со связанным свойством. А если не указать свойство то при изменении статуса не из меню тут не обновиться.zelevova писал(а):Я указал метод который нужно вызывать у объекта, а в нем уже анализировал $params['VALUE']
Блин...
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
CONNECT: http://connect.smartliving.ru/profile/311