Макросы %object.property%

Новые релизы, обновления и т.п.

Модератор: immortal

Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Макросы %object.property%

Сообщение sergejey » Пт мар 14, 2014 5:29 pm

Небольшое обновление в работе макросов типа %object.property%, которые можно использовать в домашних страницах. Теперь можно задавать период авто-обновления без перезагрузки страницы в таком виде:

%object.property|30%
%object.property|10%
%object.property|5%

Цифра после "|" обозначает частоту обновления (в секундах).

Так же для более глубокого использования добавились две javascript-функции:

ajaxGetGlobal('var','id',interval); //считывает значение свойство и ставит его в качестве содержимого элемента с заданным id, например для id123 можно использовать <span id='id123'></span> (если interval = 0, то один раз, если больше, то с указанным периодом в миллисекундах)
ajaxSetGlobal('var','value'); //устанавливает значение свойства
За это сообщение автора sergejey поблагодарил:
Bagir (Вт мар 24, 2015 2:19 pm)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Макросы %object.property%

Сообщение Alex » Пт мар 14, 2014 7:13 pm

Ё! Небеса услышали наши молитвы! Алилуя, братья. :)

Ну и несколько технических вопросов по этому поводу.

1. Сергей, скажите пару слов о внутреннем механизме.

2. В чём отличия от middle-connector-a.

3. Кaк обстоят дела с производительностью? Middle-connector увеличивает загрузку, если на страничке больше 10-и переменных.
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Макросы %object.property%

Сообщение Ivan » Пт мар 14, 2014 7:50 pm

Ещё одно предложение.

Сделайте в той же библиотеке возможность за 1 запрос выдать несколько свойств. Это пригодится для индикаторов (например temp,updateTime,Alive), что бы можно было перечислять.

А ещё предложение сделать API для индикаторов (вроде как сейчас для модулей). Тогда можно будет в маркете иметь наборы индикаторов.
И чтобы модно было в страницу вставлять что-то вроде текстового макроса.

Например %#type|object.property|30%

По TYPE вставлялся нужный тип индикатора через представленое АПИ. Я попробую сам реализовать подобное, но без Сергея не получится.
Ещё была идея сделать AJAX мастер который бы выводил перечень объектов и их свойств (по типу выпадающего меню по правой кнопке). Чтобы можно было вставлять в текст имеющиеся в системе объект.свойство
А также привязать этот мастер в поля настроек админки
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Макросы %object.property%

Сообщение sergejey » Сб мар 15, 2014 11:20 pm

Alex писал(а):Ё! Небеса услышали наши молитвы! Алилуя, братья. :)

Ну и несколько технических вопросов по этому поводу.

1. Сергей, скажите пару слов о внутреннем механизме.
Механизм достаточно простой -- перед выводом идёт обработка макроса по указанному шаблону и он заменяется на <span id..></span>, а так же добавляется запуск ajaxGetGlobal с указанным периодом.
Alex писал(а):2. В чём отличия от middle-connector-a.
К сожалению, не было возможности изучить этот механизм детально. Думаю, что основное отличие в использовании -- здесь менее гибко (нельзя динамически менять период обновления, к примеру), но проще для пользователя (не нужно ничего писать на javascript). Т.е. данный метод врятли полностью заменит middle-connector, но некоторые варианты его использования всё же сможет подменить.
Alex писал(а):3. Кaк обстоят дела с производительностью? Middle-connector увеличивает загрузку, если на страничке больше 10-и переменных.
На предмет производительности, признаться, не тестировал. В большей степени влияет на производительность частота обновления -- если 10 переменных с обновлением каждую секунду, то это лишних 10 запросов в секунду, вполне возможно, что для сервера будет ощутимо. Если запросы более редкие, то никаких проблем быть не должно.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Макросы %object.property%

Сообщение sergejey » Сб мар 15, 2014 11:31 pm

Ivan писал(а):Ещё одно предложение.

Сделайте в той же библиотеке возможность за 1 запрос выдать несколько свойств. Это пригодится для индикаторов (например temp,updateTime,Alive), что бы можно было перечислять.

А ещё предложение сделать API для индикаторов (вроде как сейчас для модулей). Тогда можно будет в маркете иметь наборы индикаторов.
И чтобы модно было в страницу вставлять что-то вроде текстового макроса.

Например %#type|object.property|30%

По TYPE вставлялся нужный тип индикатора через представленое АПИ. Я попробую сам реализовать подобное, но без Сергея не получится.
Ещё была идея сделать AJAX мастер который бы выводил перечень объектов и их свойств (по типу выпадающего меню по правой кнопке). Чтобы можно было вставлять в текст имеющиеся в системе объект.свойство
А также привязать этот мастер в поля настроек админки
Не очень понял насчёт нескольких свойств -- их можно перечислить друг за другом и по сути будет тоже самое.

По поводу индикаторов -- я думаю можно обойтись и имеющимися возможностями. Дело в том, что язык шаблонов позволяет включать файлы и указывать дополнительные параметры, т.е. можно делать шаблоны индикаторов в виде отдельных файлов и передавать им названия свойства для индикации или другие параметры.

Вот например (пишу по памяти, так что не уверен на 100%), у нас есть необходимость вызвать с домашней страницы индикатор для свойства Object.Property. Добавим на домашнюю страницу вот такой код: [#inc ../templates/indicator_coolview1.html DATA="Object.Property"#]
Эта конструкция подключит файл ../templates/indicator_coolview1.html и передаст ему параметр DATA (может быть любой другой либо несколько).
Теперь сделаем сам файл индикатора с именем indicator_coolview1.html и положим его в папку /templates/ (или /templates_alt/ на всякий случай).
Пример кода этого файла:

Код: Выделить всё

<big>%<#DATA#>|30%</big> 
выведет большим размером значение свойства Object.Property с обновлением каждые 30 секунд.

В общем, суть в том, что таким образом можно создавать шаблоны индикаторов или чего угодно.
За это сообщение автора sergejey поблагодарил:
Bagir (Вт мар 24, 2015 2:19 pm)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Макросы %object.property%

Сообщение Alex » Вс мар 16, 2014 9:09 am

Проблема:
-------------

обновился через SVN — в результате новые макросы не работают. Вообще никак.

Вопрос:
----------

ajaxGetGlobal('var','id',interval);
ajaxSetGlobal('var','value')

что подразумевается под var ? По логике должно быть obj.prop ? Хорошо бы конкретный пример.

Ещё вопрос:
----------

> Не очень понял насчёт нескольких свойств -- их можно перечислить друг за другом и по сути будет тоже самое.

Я тоже не очень понял, причём обоих. Можно пример? Как конкретно перечислять?

И ещё
--------

> язык шаблонов позволяет включать файлы и указывать дополнительные параметры, т.е. можно делать шаблоны индикаторов в виде отдельных файлов и передавать им названия свойства для индикации или другие параметры.

В примере

[#inc ../templates/indicator_coolview1.html DATA="Object.Property"#]

передаётся 1 параметр, а как несколько?


> выведет большим размером значение свойства Object.Property с обновлением каждые 30 секунд.
В общем, суть в том, что таким образом можно создавать шаблоны индикаторов или чего угодно.

Индикаторы используют canvas. Можно ли использовать в шаблоне canvas и js?
Ivan
Сообщения: 1473
Зарегистрирован: Сб окт 12, 2013 11:03 pm
Благодарил (а): 49 раз
Поблагодарили: 327 раз

Re: Макросы %object.property%

Сообщение Ivan » Вс мар 16, 2014 10:49 am

1. Несколько параметров. Я имел ввиду механизм для своих индикаторов на AJAX, я написал чтение данных из базы. Хотел просто применить механизм из коробки, а не свой. Смысл нескольких свойств такой, запрашивать а AJAX не только само значение, но и последнее время его установки и свойство alive. Если вы смотрели мои индикаторы, там по хинту выводится время актуальности, плюс хотел вывести статус что датчик жив.

2. Я не знал что можно задействовать встроенный механизм шаблонов. Потому делал свой механизм. Теперь же сделаю через механизм из коробки (всегда был приверженцем делать софт, максимально использующий механизмы ядра а не изобретать велосипед).


Вопрос: Если я сделаю совместимый механизм, могу ли я оформить как модуль в маркете?
Linux, Raspberry PI, MySensors
Connect: http://connect.smartliving.ru/profile/53
Мои проекты: http://smartliving.ru/profile/4
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Макросы %object.property%

Сообщение Alex » Вс мар 16, 2014 11:27 am

Кстати, можно на стороне М упаковывать параметры в пакет, а на стороне индикатора распаковывать. Это как вариант.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Макросы %object.property%

Сообщение Alex » Вт мар 25, 2014 10:32 am

Сергей, двумя постами выше озвучены 4 вопроса и одна проблема. Не к спеху, но всё таки хотелось бы получить ответы на вопросы. Заранее спасибо.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Макросы %object.property%

Сообщение sergejey » Ср мар 26, 2014 11:23 am

обновился через SVN — в результате новые макросы не работают. Вообще никак.
Всё ещё актуально? Ещё кто-нибудь тестировал? У меня работает и, честно говоря, не могу сообразить, из-за чего оно может вообще не работать...
Вопрос:
----------
ajaxGetGlobal('var','id',interval);
ajaxSetGlobal('var','value')
что подразумевается под var ? По логике должно быть obj.prop ? Хорошо бы конкретный пример.
Да, var это Object.Property и есть.

Код: Выделить всё

Пример установки значения:
<script language="javascript">
ajaxSetGlobal('MyObject.MyProperty','123');
</script>
Пример "извлечения" значения:

Код: Выделить всё

<span id='block_id'></span>
<script language="javascript">
ajaxGetGlobal('MyObject.MyProperty','block_id',0);
</script>
ajaxGetGlobal записывает взятое значение внутрь контейнера с указанным id (block_id в данном случае).
> язык шаблонов позволяет включать файлы и указывать дополнительные параметры, т.е. можно делать шаблоны индикаторов в виде отдельных файлов и передавать им названия свойства для индикации или другие параметры.

В примере

[#inc ../templates/indicator_coolview1.html DATA="Object.Property"#]

передаётся 1 параметр, а как несколько?
Можно сколько угодно
[#inc ../templates/indicator_coolview1.html param1="Value1" param2="Value2" param3="Value3"#]
> выведет большим размером значение свойства Object.Property с обновлением каждые 30 секунд.
В общем, суть в том, что таким образом можно создавать шаблоны индикаторов или чего угодно.

Индикаторы используют canvas. Можно ли использовать в шаблоне canvas и js?
Шаблоны это просто html-код, который обрабатывается сервером, чтобы распознать макросы и прочие конструкции встроенного языка шаблонов, так что там может использоваться всё что угодно -- любой javascript, html и прочее без ограничений. То, что сервер не распознает как ключевую конструкцию, то просто включит как есть.
Вопрос: Если я сделаю совместимый механизм, могу ли я оформить как модуль в маркете?
Да, вполне. На github-е это может быть папка ./templates/, в которой содержится набор шаблонов. Так же могут быть другие папки и файлы. Смысл в том, что модуль из маркета распаковывается поверх имеющихся файлов, так что структура дополнения в маркете может быть абсолютно любая и включать всё, что угодно и главное, чтобы файлы не пересекались с файлами "ядра", чтобы ничего не сломалось. Вообще-то может и пересекаться, это не пресекается, но при обновлении ядра они снова перепишутся и может быть неразбериха, так что лучше всё же придерживаться правила "непересечения".

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ответить