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));
Тут вся фишка в том, что при нажатии на кнопку радио переключателя, до присвоения его значения свойству объекта, мы сравниваем его с этим свойством. Это позволяет нам видеть, было ли это переключение, либо повторное нажатие на уже нажатую кнопку. Ну и дальше трали-вали ...
Вообщем я добавил эту фишку во все свои такие переключатели освещения. А новая доработка выделения кнопки цветом при включенном реле пришлась тут как нельзя к стати! Еще раз огромное спасибо Сергею за реализацию этих двух дополнений!