Руководство для разработчиков

Описание форм

Введение

Мы разделяем все запросы, приходящие в панель при работе с формами, на следующие типы:

  • get — это запрос на открытие формы. Запрос является get, если не содержит параметра sok=ok.
    • setvalues — особая разновидность get-запроса, используется для автозаполнения полей форм. Запрос является setvalues, если не содержит sok=ok и содержит параметр sv_field, указывающий имя изменившегося поля (подробнее смотри поля ввода).
  • set — запрос, приходящий когда пользователь нажимает на форме кнопку ok. Запрос является set, если содержит параметр sok=ok
    • new — запрос на создание. Это set-запрос без параметра или с пустым параметром elid
    • edit — запрос на изменение. Это set-запрос с непустым параметром elid

Следующий атрибут можно использовать в любом тэге внутри метаданных формы:

атрибут remove_if

Любой тэг в описании метаданных формы может иметь атрибут remove_if. Если значение этого атрибута равно new — тэг будет вырезан при get запросе с пустым параметром elid. Если значение атрибута равно edit — тэг будет вырезан при get запросе с непустым параметром elid. Любые другие значения этого атрибута никак не обрабатываются.

Начнем с примера. Следующая XML описывает форму "Настройки панели". Эта статья посвящена описанию тэгов и атрибутов этого XML-кода.

<metadata name="usrparam" type="form">
  <form>
    <field name="name">
      <input type="text" name="name" readonly="yes"/>
    </field>
    <field name="theme">
      <select name="theme"/>
    </field>
    <field name="lang">
      <select name="lang"/>
    </field>
    <field name="atype">
      <select name="atype">
        <if value="atany" hide="addr"/>
      </select>
    </field>
    <field name="addr">
      <input type="text" name="addr" zoom="5" check="iprange"/>
    </field>
    <field name="startpage">
      <select name="startpage"/>
    </field>
    <field name="rows">
      <input type="text" name="rows" maxlength="4" check="int" checkargs="5,9999"/>
    </field>
    <field name="recordlimit">
      <input type="text" name="recordlimit" maxlength="9" check="int" checkargs="1,999999999"/>
    </field>
    <field name="buttonview">
      <select name="buttonview"/>
    </field>
  </form>
</metadata>

Описание внешнего вида

Форма

Все отображаемые элементы формы должны быть описаны внутри тэга form.

атрибут autocomplete

Если имеет значение "off", автозаполнение полей средствами браузера будет отключено.

атрибут cancelrefresh

Если атрибут задан, то список, из которого была вызвана форма, будет обновлён и при нажатии кнопки Отмена.

атрибут maxwidth

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

атрибут nocancel

Если задан, не будет показываться кнопка Отмена. атрибут nosubmit Если задан, не будет показываться кнопка OK.

атрибут target

Если равен 'blank', то ответ форма будет отправлена в новое окно.

атрибут action

Если задан, то форма будет отправлена по адресу из атрибута

атрибут wizard

Если задан, форма будет иметь вид мастера . При этом, значение "first" будет отображать первую страницу, "middle" одну из срединных, "last" последнюю.

атрибут helpurl

Если задан, то при нажатии на кнопку вызова справки будет открыта страница, указанная в значении данного атрибута. Если в URL присутствует макрос __LANG_, он будет заменен на аббревиатуру языка интерфейса пользователя. Если не задан, будет вызвана функция текущей панели help, которой в параметре topic будет передано имя формы. Эта функция должна вернуть URL с документацией по этой форме.

атрибут clear

управляет поведением кнопки "Очистить форму". Если задан, то форма очищается полностью: все поля ввода будут иметь пустое значение, во всех select будет выбрано первое значение, все флажки будут сняты. В противном случае срабатывает встроенный метод формы .reset(), который сбросит значения полей формы в состояние, которое было на момент её загрузки. Данный атрибут удобен при описании форм для фильтров.

атрибут progress

Если имеет непустое значение (рекомендуем использовать значение "yes"), то после отправки формы будут отображаться этапы выполнения запроса. Если значение атрибута равно "notime", этапы выполнения будут отображаться, но без вывода ожидаемого времени исполнения. Это может быть полезно, если количество шагов заранее неизвестно или время выполнения отдельных шагов сильно отличается. Значение атрибута "wait" говорит о том, что progress может ожидать перезапуска панели (в остальных случаях progress исчезает, как только завершится запрос)

атрибут title

задает имя тега, содержимое которого будет использоваться как имя редактируемого элемента. Если не задан, используется значение elid.

элемент page

см. Вкладки (элемент page)

элемент field

см. Описание полей формы (элемент field)

Вкладки (элемент page)

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

атрибут name

Имя вкладки. Необходимо для связки с языками.

атрибут collapsed

Состояние вкладки. Если равно yes, то вкладка будет свёрнута.

элементы field

Описывают поля, которые есть на данной вкладке. Подробнее см. Описание полей формы (элемент field)

Описание полей формы (элемент field)

Поля формы могут располагаться или на вкладках, или независимо внутри тэга form. Смешивать два этих варианта нельзя. Отображаемое имя поля берется из одноименного сообщения на языке интерфейса. Кроме имени, у поля формы может быть расширенное описание, появляющееся при наведении указателя на имя поля. Оно берется из сообщения с именем hint<имя поля>_.

атрибут name

Имя поля. 

атрибут fullwidth

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

атрибут formwidth

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

атрибут noname

Не показывать заголовок поля.

атрибут fixed

Позиция поля будет зафиксирована в исходном положении, независимо от скроллинга.

элемент input

Соответствует input из HTML

элемент select

Создать выпадающий список

элемент textarea

Многострочное поле ввода

элемент slider

Выбор числа из определенного диапазона

элемент list

Отображения списка с картинками и кнопками на форме

элемент tree

Выбор значения из списка в виде дерева элемент htmldata Отображение HTML-данных

элемент textdata

Вывод текстовой информации

элемент frame

Отображение фрейма

Поля ввода

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

атрибут name

Имя поля. Значение поля будет прочитано из тега имя которого соответствует значению данного атрибута. А в момент отправки формы, значение поля будет передано в параметре с таким именем.

атрибут environ

Значение "no", указывает, что значение этого поля не следует передавать во внешние обработчики, используя переменные окружения. Полезен для полей, значение которых может превышать десятки килобайт

атрибут readonly

Если задано, поле будет доступно только для чтения.

атрибут level

См. Введение. 

атрибут convert

Задает алгоритм для преобразования значения поля. Значение этого поля будет преобразовано с использованием данного алгоритма при редактировании записи. При ее просмотре будет выполнено обратное преобразование. На данный момент реализованы:

  • punycode при редактировании значение из UTF-8 преобразуется в punycode формат. Предполагается, что этот алгоритм будет использоваться для преобразования доменных имен и адресов электронной почты. В последнем случае, преобразуется только домен, имя почтового ящика остается без изменений.
  • money значение разделяется пробелами на группы по три цифры
  • bytes/abytes значение преобразуется в удобочитаемое представление размера и обратно. Например, значение 2048 будет отображено как "2 Kb". Панель будет преобразовывать числа большие 1000 добавляя соответствующий суффикс вплоть до Tb. Первый производит округление до двух знаков после запятой, второй не преобразует значение, если это приведет к потере точности.

Convert выполняется после выполнения функции-валидатора

атрибут required

Если равно "yes", значение поля не может быть пустым.

атрибут save

Если равно "yes", панель будет запоминать последнее значение, введенное в этом поле при создании нового элемента (когда elid пуст) и предлагать его как значение по умолчанию. Если равно "always", панель будет запоминать последнее значение, даже если elid имеет не пустой.

атрибут setvalues

Если равно "yes", при каждом изменении этого поля на сервер будет отправляться запрос со значениями всех полей и параметром sv_field, в который будет записано имя изменившегося поля. В качестве ответа должен быть получен список значений для полей и содержимое списков (slist), как при открытии формы. Все переданные значения будут подставлены в форму.

Если равно "final", то при изменении пресетом поля с другим пресетом, на этом поле не будет срабатывать setvalues.

Если равно цифре, то setvalues будет срабатывать с периодичностью в эту цифру секунд.

Если равно blocking, то форма будет заблокирована для изменений, пока не придет ответ от панели.

По setvalues можно изменять:

  • атрибут readonly, для этого надо отдать атрибут readonly=yes в узле значения поля, для присвоения атрибута, либо readonly=no, для снятия атрибута
  • кнопки (), для этого в doc нужно отдать новые кнопки (/doc/buttons/button)
  • атрибут mask, для этого надо отдать атрибут mask="NEW_MASK" в узле значения поля
  • атрибут min/max для элемента slider
  • префикс поля, для этого надо отдать узел с новым значением префикса
  • значения списка на форме
  • список значений селекта, мультиселекта
  • новые сообщения для запроса

атрибут secured 

Если равно "yes" и была авторизация по COOKIE и запрос не имел заголовка Referer, эти поля и соответствующие им данные будут удалены из ответа 

атрибут focus

Принудительно устанавливает фокус на элементе 

атрибут source

Должен содержать запрос к панели управления. Если значение для поля ввода не было установлено функцией явно, оно будет взято из результатов запроса 

элемент if

для всех полей кроме slider. Подробнее см. сокрытие полей и вкладок 

элемент else

для всех полей кроме slider. Подробнее см. сокрытие полей и вкладок


Элемент input

Input предназначен для создания текстовых полей, флажков и полей выбора файла.

атрибут type

Тип поля. Может иметь значения text, checkbox, password, file, hidden.

атрибут checkpasswd

Содержит имя поля, с которым сравнивается значение текущего. Если значения не совпадают — будет выведено сообщение о несовпадающих паролях.

атрибут genpasswd

Будет отображена кнопка генерации пароля, для поля типа password, без подтверждения.

атрибут safevalue

В качестве значения должно быть указано имя параметра. Если этот параметр был передан, он должен содержать значение, которое не требует проверки или проверяется программистом (например: зашифрованное значение пароля). В этом случае, для основного параметра (имя которого передано в атрибуте @name) никаких проверок не выполняется

атрибут date

Если задано, к полю будет прикреплена кнопка вызова календаря. Только для type="text". Если равно month, то календарь только для выбора года и месяца.

атрибут oncesyncfield

используется совместно с @date, при выборе даты будет задано то же значение в указанное в атрибуте поле, если оно пусто

атрибут maxlength

Максимальная длина поля.

атрибут unlimit

Добавить к полю кнопку установки бесконечного значения. Значение бесконечности передаётся в качестве значения этому атрибуту.

атрибут width

Ширина поля.

атрибут zoom

Добавить функционал разворачивания текстового поля вертикально до заданного количества строк. Например: zoom="5". При этом значение поля разбивается по пробелам и полученные части размещаются в отдельных строках поля. В этом случае валидатор применяется для каждого значения отдельно.

атрибут duplicate

Применяется совместно с атрибутом zoom. Если равно "yes", валидатор пропускает повторяющиеся значения (по умолчанию повторяющиеся значения запрещены).

атрибут check

Имя функции-валидатора , для проверки значения данного поля. Для проверки/корректировки значения будет вызвана функция check.<имя>, которой будут переданы следующие параметры: value — текущее значение поля, name — имя поля, args — значение атрибута checkargs, funcname — имя вызванной функции. Функция должна вернуть новое значение в тэге или тэг error — с описанием ошибки.

атрибут checkargs

Дополнительные параметры для функции, указанной в атрибуте check.

атрибут prefix

Если задано, то у поля будет отображаться префикс. Значение префикса задается нодой <"имя поля"prefix>

атрибут plainhint

Отображает под элементом текстовое описание, для определенных значений элемента. Описание берется из сообщений локализации с именем hint_CONTROLNAME_VALUE, где VALUE — значение элемента для которого должно отображаться это текстовое описание. (Только для типа checkbox)

атрибут img

Только для типа checkbox. Отобразить картинку, указанную в атрибуте, перед флажком.

атрибут accept

Только для типа file. Нативный html атрибут. http://htmlbook.ru/html/input/accept

атрибут maxsize

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

атрибут mask

Только для поля типа text. Можно задать маску ввода, в теме orion используется следующая библиотека https://github.com/RobinHerbots/jquery.inputmask . Также маску ввода можно менять по setvalues, смотрится атрибут mask.

атрибут mixed

Если значение "hide", поле будет скрыто при групповом редактировании, если значения в этом поле различаются для различных записей

Выпадающий список (элемент select)

Select предназначен для создания выпадающих списков и переключателей

атрибут type

Тип select'а, используется для вставки переключателей в форму — значение type="radio", мультиселекта — значение type="multiple", переключателя с картинками — значение type="radioimg", список с автодополнением — значение type="autocomplete". Если не указан, будет создан выпадающий список.

атрибут inline

Показывать переключатели горизонтально, только для type="radio". Значение атрибута указывает максимальное количество значений select, которое может быть отображено. Если список содержит большее количество значений, он будет преобразован в обычный выпадающий список.

атрибут depend

Если задано, показываемый выбор этого списка будет зависеть от текущего значения другого списка, имя которого передано в качестве значения этому атрибуту. depend от выпадающих списков типа multiple пока не реализован.

атрибут sort

Задает тип сортировки. Возможные значения: alpha (алфавитная сортировка; по умолчанию), calpha (регистронезависимая алфавитная сортировка), digit (сортировка в порядке числового возрастания), version (сортировка версий программного обеспечения) и ip (сортировка IP-адресов).

атрибут sorted

Отсортировать по описанию значений. Возможные значения: asc (в прямом порядке), desc (в обратном порядке). Сортировка происходит по отображаемым значениям.

атрибут required

Для выпадающего списка типа multiple требует выбора хотя бы одного значения. Для остальных типов — никак не влияет на обработку

атрибут maxselect

Только для списка типа multilple, задает максимальное количество выбранных элементов.

атрибут source

В отличии от других полей ввода, для select из указанного источника берется не только значение, но и список возможных значений. В качестве источника может выступать другая форма, возвращающая slist или список. В случае, если это список, список значений будет построен из колонок с именем key и keyname (если он задан).

атрибут plainhint

Отображает под элементом текстовое описание, для определенных значений элемента. Описание берется из сообщений локализации с именем hint_CONTROLNAME__VALUE, где VALUE — значение элемента для которого должно отображаться это текстовое описание.

Значения

Список значений будет взят из тега , который должен быть сформирован панелью при обработке get запроса. Например:

<slist name="lang">
  <msg>ru</msg>
  <val key="en">English</val>
</slist>

Список lang будет содержать 2 значения: ru и en. Отображаемая строка для тэгов (в данном случае значение: ru) будет взята из соответсвующего сообщения , а для en будет отображено English. Для совместимости с сообщениями для значений столбцов списков, вначале проверяется сообщение с именем <имя select>_<значение тэга msg>, если таковое не найдено, берется сообщение с именем соответствующим значение тэга msg (исключительно для совместимости, рекомендуем использовать префиксы вариант).

Для тэгов внутри ( или ) вы можете использовать следующие атрибуты:

атрибут key

Позволяет указать значение, которое будет передано панели при выборе этого пункта, в противном случае будет использовано содержимое тэга

атрибут depend

Задает значение из базового списка. Данный пункт будет доступен только если в базовом списке выбрано соответствующее значение. Если depend не задан, пункт будет доступен вне зависимости от того, что выбрано в базовом списке

атрибут priority

Значение — целое число, задает приоритет для сортировки. Значения будут отсортированы в порядке возрастания приоритета, а уже потом в том порядке, который установлен атрибутами @sort и @sorted соответствующего поля ввода.

атрибут img

Задает имя картинки из темы, которую нужно отображать напротив значения. Только для обычного select и type="radioimg"

атрибут image

Задает путь до картинки вне темы, которую нужно отображать напротив значения. Только для обычного select и type="radioimg"

атрибут width

Задает ширину отображаемой картинки. Используется только с атрибутом image.

атрибут height

Задает высоту отображаемой картинки. Используется только с атрибутом image.

Связанные списки

Часто возникает ситуация, когда содержимое одного списка должно зависеть от того, что было выбрано в другом. В CORE это реализовано посредством атрибута depend. Например, вам необходимо выбрать компанию и некий продукт, который она выпускает. Вы можете это сделать следующим образом:

<metadata name="some_form" type="form">
  <form>
    <field name="company">
      <select name="company"/>
    </field>
    <field name="product">
      <select name="product" depend="company"/>
    </field>
  </form>
</metadata>

<slist name="company">
  <val>Canon</val>
  <val>Nikon</val>
</slist>

<slist name="product">
  <val depend="Canon">EOS 1100D</val>
  <val depend="Canon">EOS 5D Mark III</val>
  <val depend="Nikon">D800</val>
  <val depend="Nikon">D4</val>
</slist>

В этом случае при выборе company=Canon будут доступны для выбора продукты: EOS 1100D и EOS 5D Mark III. А при выборе Nikon: D800 и D4.

Список с автодополнением

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

Многострочное поле ввода (элемент textarea)

атрибут height

Высота поля.

атрибут rows

Количество строк в поле ввода.

атрибут wrap

Если "off", строки не будут переноситься.

атрибут quote

Добавляет кнопку "цитировать".

атрибут editor

Добавляет подсветку синтаксиса для поля.

атрибут codelang

Подсветку синтаксиса какого языка отображать.

атрибут texteditor

Добавляет WYSIWYG — редактор для поля.

атрибут bcolor

Задает цвет бэкграунда, например: red, #CCCCCC

При редактировании файлов стоит иметь ввиду, что по умолчанию при отправке формы все переносы строк кодируются в \r\n http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.4

Плагин для WYSIWYG-редактора

В WYSIWYG-редакторе TinyMCE для вставки макросов используется плагин isp_bill_macro.

Список макросов берётся из элемента olist по имени исходной textarea.

XML:

<xml>
  <olist name="message">
    <val key="@USERNAME@">Имя пользователя</val>
    <val key="@REALNAME@">ФИО пользователя</val>
    <val key="@ACCOUNT_ID@">Код клиента</val>
  </olist>
</xml>

Элемент Slider

Элемент для выбора числа из определенного диапазона.

атрибут min

Задает нижнее ограничение значения поля. Это значение может быть изменено, через параметр min тэга, содержащего значение данного поля.

атрибут max

Задает верхнее ограничение значения поля. Это значение может быть изменено, через параметр max тэга, содержащего значение данного поля.

атрибут step

Задает шаг слайдера.

Значения min и max в дальнейшем могут быть заданы непосредственно в теге, содержащем значение поля. В следующем примере будет отображен slider с минимальным значением 10 и максимальным 20 (хотя в метаданных заданы другие ограничения):

<metadata name="test" type="form">
  <form>
    <field name="field">
      <slider name="sl_field" min="0" max="100"/>
    </field>
  </form>
</metadata>

<sl_field min="10" max="20">15</sl_field>

Элемент period

Элемент для выбора перида времени — двух дат в формате YYYY-MM-DD.

атрибут default

Значение по умолчанию для периода. Может принимать значения: today, currentweek, currentmonth, currentyear, lastday, lastweek, lastmonth, lastyear, nodate.

Данный элемент будет преобразован в select и два input. Введенные значения будут доступны в параметрах internal_<@name>start и internal_<@name>end или через IParam, в этом случае префикс internal_ добавлять не надо.

Элемент list

Элемент отображения списка на форме

<metadata name="sel.form.basket" type="form" mgr="testmgr" decorated="yes">
  <form>
    <field name="list">
      <list name="list" key="id">
        <col name="image" type="img" width="48px" height="48px"/>
        <col name="desc" type="data"/>
        <col name="frommsg" type="msg"/>
        <col name="price" type="data" align="right"/>
        <col name="checkbox" type="control" align="right"/>
        <col name="action" type="button" align="right"/>
      </list>
    </field>
    <buttons/>
  </form>
</metadata>

атрибут key

идентификатор строки, будет отправлен в виде параметра при нажатии кнопки из этой строки

атрибут type

тип отображения (необязательный атрибут)

типы отображения:

  • block — отобразить в виде блоков
  • table — отобразить в виде таблицы, заголовки таблицы будут браться из локализованных сообщений по имени колонки с префиксом list_

элемент col

описывает колонку таблицы списка 

атрибут type

(элемента col) задает тип данных колонки

типы данных колонки:

  • data: текст или html
  • msg: текст из локальных сообщений
  • img: картинка
  • button: кнопка
  • control: контрол (пока только checkbox)


атрибут align(элемента col)

задает горизонтальное выравнивание текста, может быть right, center, left

атрибут width(элемента col)

задает ширину колонки (значение указывается в px, т.е. "30px"), для типа img это еще и ширина картинки

атрибут height(элемента col)

задает высоту картинки, только для типа img

Значения

Содержимое списка будет взято из тега

<list name="list">
  <elem>
    <id>2</id>
    <image>/manimg/common/img/mb-sysstat.png</image>
    <desc>ЖК Монитор 17''</desc>
    <price>1238.00 RUB</price>
    <action>
      <button name="edit" type="setvalues"/>
      <button name="delete" type="setvalues"/>
    </action>
  </elem>
</list>

Элемент tree

Элемент отображения дерево выбора

<metadata name="file.folder" type="form">
  <form>
    <field name="dirlist" fullwidth="yes">
      <tree name="dirlist" rows="20" multiple="yes"/>
    </field>
  </form>
</metadata>

атрибут rows

Задает высоту дерева, например 20

атрибут multiple

Задает возможность выбора более одного элемента дерева

Значения

Содержимое списка будет взято из тега

<tlist name="dirlist">
  <val key="2f" img="p-file-0">
    /
    <tlist>
      <val key="2f62696e" img="p-file-0">bin</val>
      <val key="2f626f6f74" img="p-file-0">boot</val>
      <val key="2f726f6f74" img="p-file-0">
        root
        <tlist>
          <val key="2f726f6f742f2e617567656173" img="p-file-0">.augeas</val>
          <val key="2f726f6f742f2e6361636865" img="p-file-0" collapsed="yes">.cache</val>
          <val key="2f726f6f742f2e636f6e666967" img="p-file-0" collapsed="yes">.config</val>
          <val key="2f726f6f742f2e6c6f63616c" img="p-file-0" collapsed="yes">.local</val>
        </tlist>
      </val>
      <val key="2f72756e" img="p-file-0" collapsed="yes">run</val>
      <val key="2f7362696e" img="p-file-0">sbin</val>
      <val key="2f73656c696e7578" img="p-file-0">selinux</val>
    </tlist>
  </val>
</tlist>

Описание атрибутов элемента val:

атрибут img

задает картинку перед название элемента

атрибут key

задает значение элемента

атрибут collapsed

говорит о том, что элемент имеет дочерние элементы; подгрузка дочерних элементов будет происходить по средствам setvalues, для получения дочерних элементов будет послан запрос вида: func=FUNC&elid=ELID&plid=PLID&FIELD_NAME=FIELD_VALUE&sv_field=FIELD_NAME&sv_tree=yes, где FUNC — имя ф-ции формы, ELID — elid формы, PLID — plid формы, FIELD_NAME — имя дерева, FIELD_VALUE — значение выбранного элемента

Информативные поля

Следующие типы полей служат для отображения информации, но не дают возможности её редактирования.

Элемент htmldata

Поле служит для отображения HTML-данных. HTML будет передан браузеру без всяких преобразований.

атрибут chheight

Позволить изменять высоту htmldata за счёт другого поля ввода (должно находиться ниже), id которого передано в качестве значения атрибута.

атрибут height

Высота поля.

Вывод текстовой информации (элемент textdata)

Поле служит для отображения дополнительного текста в форме.

атрибут type

Обязательное поле определяющее тип источника данных.

атрибут warning

Задает красный цвет текста

Возможные типы:

  • msg содержимое будет взято из локализованного сообщения. Имя сообщения будет взято из атрибута name. (имя field не должно совпадать с именем элемента, из-за особенностей отображения в теме sirius )
  • msgdata содержимое будет взято из локализованного сообщения. Имя сообщения будет прочитано из тэга, имя которого указано в атрибуте name.
  • data содержимое будет взято из тэга, имя которого указано в атрибуте name.

Элемент img

Используется в связке с textdata и htmldata, служит для вывода картинки слева от элемента.

атрибут width

задает ширину картинки

атрибут height

задает высоту картинки

атрибут img

имя картинки из спрайта темы

путь к картинке указывается в значении поля. Если указан атрибут img, то картинка будет браться из спрайта темы.

<field name="textdata_img">
  <img name="image_field" width="48" height="48"/>
  <textdata name="textdata_img" type="data"/>
</field>

Вывод текстовой информации (элемент desc)

Используется только со связкой input, checkbox и slider , служит для вывода дополнительной информации, справа от элемента.

<field name="dummy_name">
  <input type="checkbox" name="checkbox_name"/>
  <desc name="some_name"/>
</field>

Используется для отображения ссылки на форме.

Внимание! Отображаемое имя ссылки будет браться из сообщений локализации по имени элемента. Поэтому для отображения имени поля вам нужно иметь различные названия у поля и элемента, либо использовать атрибут noname поля, чтобы не отображать название вовсе.

атрибут target

нативный атрибут ссылки (http://htmlbook.ru/html/a/target )

атрибут internal

если равно yes, то ссылка откроется как дочерний таб внутри манагера

атрибут newtab

используется совместно с атрибутом internal, ссылка будет открыта в новом табе манагера

<metadata type="form">
  <form>
    <field name="link">
     <link name="link" target="_blank"/>
    </field>
  </from>
</metadata>
<link>http://ru.5.ispdoc.com/</link>


Элемент frame

Используется для отображения фрейма.

атрибут height

задает высоту элемента

<metadata type="form">
  <form>
    <field name="myframe">
     <frame name="myframe" height="50px"/>
    </field>
  </from>
</metadata>
<myframe>http://ru.5.ispdoc.com/</myframe>


Элемент отображения времени и даты datetime

Служит для отображения даты и времени. Будет отображать текущее время в формате YYYY-MM-DD HH:MM:SS.

XML:

<metadata type="form">
  <form>
    <field name="mydatetime">
     <datetime name="mydatetime" setvalues="30"/>
    </field>
  </from>
</metadata>
<mydatetime>2014-12-15 10:11:16</mydatetime>

атрибут name

имя элемента

атрибут setvalues

время вызова setvsalues в секундах

Несколько элементов в одном поле

Есть возможность отображать два элемента в одном поле.

Доступны следующие комбинации:

  • Элемент input (типа text) + Элемент select
  • Элемент input (типа text) + Элемент link
  • Элемент input (типа text) + Элемент input (типа text)
  • Элемент input (типа text) + Элемент input (типа checkbox)
  • Элемент select + Элемент link

Кнопки (секция buttons)

Предназначена для описания кнопок на форме.

По умолчанию выводятся две кнопки OK и Отмена. Но есть возможность убрать любую из них, либо добавить еще 4-ре — сброс формы, назад, вперед и кнопку вызова пресета.

Логика работы следущая, если секции buttons нет, то обрабатывются атрибуты формы @nocancel, @nosubmit и в зависимости от них выводятся или не выводятся кнопки OK и Отмена.

Если секция buttons существует, то выводятся кнопки, описанные в ней, атрибуты формы игнорируются.

Элемент button

Элемент описывает кнопку.

атрибут name

имя кнопки, от него зависит надпись на кнопке, берется из локальных сообщений по значению атрибута, с префиксом msg_

атрибут keepform

используется совместно с атрибутом type=blank, если равно yes, то не закрывает форму после отправки

атрибут type

тип кнопки, определяет поведение кнопки

атрибут func

только для типа cancel, после закрытия формы вы будете перенаправлены в модуль из атрибута

атрибут blocking

только для типа setvalues, при нажатии будет отображаться лоадер, пока не отработает механизм пресетов

атрибут disabled

кнопка будет неактивной

Возможные типы:

  • ok отправляет форму
  • cancel закрывает форму
  • reset сбрасывает значения формы на дефолтные
  • next кнопка для визардов, добавляет к форме параметр snext=ok
  • back кнопка для визардов, добавляет к форме параметр sback=ok
  • blank отправляет форму в новое окно
  • setvalues вызывает пресет, в значение параметра sv_field отправляется имя кнопки
  • func открывает дочерний список/форму, имя ф-ции указывается в атрибуте func

Пример xml со всеми видами кнопок:

<form ...>
  <buttons>
    <button name="back" type="back"/>
    <button name="ok" type="ok"/>
    <button name="cancel" type="cancel"/>
    <button name="next" type="next"/>
    <button name="reset" type="reset"/>
    <button name="blank" type="blank"/>
    <button name="setvalues" type="setvalues"/>
  </buttons>
</form>

Сокрытие полей и вкладок (тэги if и else)

Веб-интерфейс CORE позволяет скрывать некоторые элементы форм в зависимости от значений других элементов. Для этого служат два тега: if и else. В теге if необходимо указать значение, на которое будет срабатывать условие. Условие else сработает, если не было найдено ни одного if с соответствующим значением. Условие else можно использовать только в select полей.

Если вам необходимо спрятать несколько полей по одному условию, необходимо написать несколько тегов if с одинаковым условием и различным значением атрибута hide. Или несколько тегов else.

Внимание: прятать можно только поля и вкладки, описанные после. Если ваше поле находится на второй вкладке, то, в зависимости от его значения, вы можете скрывать поля находящиеся на этой вкладке после вашего. Или, вы можете скрывать вкладки начиная с третьей. Значение сокрытого поля никак не влияет на видимость других полей.

атрибут empty

если значение атрибута равно "yes", if должен срабатывать при пустом значении поля, если "no" — при непустом. Этот атрибут можно использовать только в условиях внутри input полей.

атрибут value

задает значение для if условия. Для checkbox значение этого атрибута может быть только "on" или "off". Этот атрибут нельзя использовать в условиях внутри input полей.

атрибут hide

задает имя поля формы или имя вкладки, которую необходимо спрятать.

атрибут shadow

Если его значение равно "yes", поле формы будет не полностью скрыто, а лишь сделано недоступным для изменения. Описание этого поля будет дополнено сообщением с именем shadow_hint_<имя поля>.

Select в следующем примере будет прятать элемент формы с именем second, если выбрано значение "show first", или прятать элемент с именем "first" в противном случае.

  <select name="list_name">
    <if value="show first" hide="second"/>
    <else hide="first"/>
  </select>

Если вам необходимо спрятать поле при всех возможных значениях select кроме одного — вы можете написать следующее:

  <select name="list_name">
    <if value="show first"/>
    <else hide="first"/>
  </select>

Локализация

Для описания сообщений используемых формой необходимо добавить одноименную секцию messages.

Например, следующий XML описывает сообщения для формы просмотра фоновых заданий:

<?xml version="1.0"?>
<mgrdata>
  <lang name="ru">
    <messages name="longtask.edit">
        <msg name="title">Фоновое задание</msg>
        <msg name="hint_name">Имя скрипта или исполняемого файла</msg>
        <msg name="hint_queue">Имя очереди, в которую было помещено задание</msg>
        <msg name="hint_id">Порядковый номер задания в очереди</msg>
        <msg name="hint_pidfile">Путь до PID-файла</msg>
        <msg name="hint_params">Список параметров задания</msg>
        <msg name="name">Имя скрипта</msg>
        <msg name="pidfile">PID-файл</msg>
        <msg name="queue">Имя очереди</msg>
        <msg name="id">Номер в очереди</msg>
        <msg name="depends">Зависимости</msg>
        <msg name="startdate">Время запуска</msg>
        <msg name="enddate">Время завершения</msg>
        <msg name="params">Доп. информация</msg>
    </messages>
  </lang>
</mgrdata>

Эти сообщения используются следующим образом:

  • Для вкладок и полей описание берется из одноименного тега .
  • При наведении на имя поля появляется подсказка. Эта подсказка берется из с именем "hint_<имя поля>"
  • Для текстовых полей ввода можно задать заполнитель (placeholder) — текст, который будет отображаться в поле, имеющем пустое значение. Заполнитель берется из с именем "placeholder_<имя поля>"
  • Заголовок формы:
    • для new запросов берется из тега с именем "title_new" или с именем "title", если не найден.
    • для edit запросов берется из с именем "title". Кроме того, в конец сообщения будет добавлено содержимое тэга, имя которого указано в атрибуте @title тэга form . Или из тэга , если атрибут @title для form не задан.

Если какое-то из вышеперечисленных сообщений не задано явно, CORE пытается найти его в секции messages с именем common.

  • для кнопки Ok используется сообщение с именем "msg_ok"
  • для кнопки Cancel используется сообщение с именем "msg_cancel"

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