Практична робота в K2 ERP PHP

Матеріал з K2 ERP Wiki Ukraine — База знань з автоматизації та санкцій в Україні
Версія від 20:13, 28 квітня 2026, створена R (обговорення | внесок) (Перенос з GoogleDoc практичної роботи)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Класи та команди K2 Cloud ERP PHP — технічна документація з формування меню, таблиць K2Grid, YML-описів, master-detail зв’язків та налаштування форм у K2 Cloud ERP PHP.

Формування меню

Меню до класів формується за допомогою масиву, або автоматично - за допомогою yml-файлу.

Прийнято зберігати меню в в /папка компоненти/res/menu/назва меню.yml.

Приклад вивода такого меню:

<syntaxhighlight lang="yaml">

  1. Icons: https://icons.getbootstrap.com/icons/
  2. https://fontawesome.com/icons

category:

parent: "root"
name: "k2test_examples_old"
caption: "Examples"
iconclass: "fa fa-flask"

elements:

  1. - name: "k2test_stimulsoft"
  2. caption: "StimulSoft Demo"
  3. url: "?adm=k2test_stimulsoft"
  4. command:
- name: "k2test_phpgrid"
  caption: "PHPGrid Demo"
  addcaption: "+"
  # Exanole: addcaption_style: "{addcaption}"
  # caption: "PHPGrid Demo6"
  # badge bg-success text-bg-secondary me-3
  iconclass: "bi bi-grid-3x3"
  url: "?adm=k2test_phpgrid"
  command:
  1. - name: "k2test_newphpgrid"
  2. caption: "PHPGridNew"
  3. url: "?adm=k2test_newphpgrid"
  4. command:
- name: "k2test_phpkool"
  caption: "PHPKool Demo"
  addcaption: "+"
  url: "?adm=k2test_phpkool"
  iconclass: "bi bi-backpack4"
  command:
- name: "k2test_jqwidgets"
  caption: "jQWidgets"
  url: "?adm=k2test_jqwidgets"
  iconclass: "bi bi-ui-checks-grid"
  command:
- name: "k2test_demopivottable"
  caption: "Pivot Table"
  url: "?adm=k2test_demopivottable"
  iconclass: "bi bi-card-list"
  command:
- name: "k2test_pdf"
  caption: "PDF"
  url: "?adm=k2test_pdf"
  iconclass: "bi bi-file-earmark-pdf"
  command:
- name: "k2test_pdf"
  caption: "PHPExcel"
  url: "?adm=k2test_phpexcel"
  iconclass: "bi bi-file-earmark-excel"
  command:

</syntaxhighlight>

name - ідентифікатор меню. По ньбому потім будуть визначатись права доступу користувачів.

caption - заголовок меню.

addcaption - текст, що виводиться права від меню (в нашому прикладі - це +).

addcaption_style - стиль, того, що виводиться справа, якщо потрібно зробити, щоб він відрізнявся від стилю по замовчуванню. Наприклад:

addcaption_style: "{addcaption}"

iconclass - клас іконки для пункту меню. Ці класи можна знайти на сайтах:

url - URL переходу по пункту меню

command - команда. Зарезервований функціонал на майбутнє.

1. Кольори бейджів

Можна використовувати будь-які з наступних класів:

  • badge bg-primary
  • badge bg-secondary
  • badge bg-success
  • badge bg-danger
  • badge bg-warning
  • badge bg-info
  • badge bg-light text-dark
  • badge bg-dark

Приклад:

html: 3

!

2. Іконки замість або разом із цифрами

Ви можете використовувати Font Awesome, Bootstrap Icons або будь-які інші SVG/шрифтові іконки всередині бейджа:

html:

Або разом із цифрою:

html:

5

3. Анімація або пульсація

Можна додати CSS-анімацію через кастомні класи:

css: .pulse-badge {

animation: pulse 1s infinite;

}

@keyframes pulse {

0% { transform: scale(1); opacity: 1; }

50% { transform: scale(1.2); opacity: 0.6; }

100% { transform: scale(1); opacity: 1; }

}

html: !

4. Розміщення бейджа на правому краю меню

Застосовуйте утиліти вирівнювання, наприклад ms-auto або float-end:

html: <a href="#" class="nav-link d-flex justify-content-between align-items-center">

PHPGrid Demo

6

</a>

5. Кастомний HTML у бейджі

Можна вставити будь-який HTML: SVG, emoji, спінер:

html:

🔔 6

6. Комбіновані бейджі (наприклад, статуси)

html: Active

Offline

Формування таблиць

Меню до класів формується за допомогою масиву, або автоматично - за допомогою yml-файлу.

Прийнято зберігати меню в в /папка компоненти/res/grid/назва меню.yml.

K2Grid YML: створення таблиць у зв’язці master–detail

Мета: пояснити, як описувати таблиці K2Grid у форматі YML, включно з полями, сортуванням, типами редакторів, діями‑кнопками, списками‑довідниками та зв’язком майстер → детайл. Приклади нижче базуються на ваших файлах dp2_zavdan_lab (майстер) та dp2_zavdan_rows (детайл).

1) Структура YML загалом

YML опис таблиці складається з двох шарів:

  1. Заголовок таблиці (метадані): SQL‑джерело, ім’я таблиці, заголовок, сортування, висота, режим детайлу тощо.
  1. Опис полів (fields:): набір елементів, де кожен ключ — це унікальне ім’я поля (внутрішній ідентифікатор у схемі YML), а значення — атрибути відображення/редагування.

1.1. Обов’язкові ключі заголовка

  • select — SQL, який повертає всі стовпчики, потрібні для гріда. Дозволені JOIN, LEFT JOIN тощо.
  • table — логічне ім’я сутності (використовується для CRUD, логіки backend).
  • typeid — тип опису (для K2Grid; зазвичай 1).
  • caption — заголовок гріда (відображається у UI).

1.2. Рекомендовані/опційні ключі заголовка

  • sortname — поле сортування за замовчуванням (наприклад, order_ins).
  • sortorder — напрямок сортування: asc / desc.
  • height — фіксована висота гріда у пікселях або відсотках (наприклад, 300).
  • detile — назва детальної таблиці (YML‑ідентифікатор). Вмикає режим master–detail у UI.
  • where — додаткове фільтрування SQL (часто застосовується у детайлі з плейсхолдерами).
  • getmaster: true — вказує, що грід працює у режимі детайлу й очікує ідентифікатор майстра.
  • masterid — назва поля, яким детайл зв’язаний із майстром (у SQL‑select детайлу це має бути стовпчик, що містить «ключ майстра»).

Примітка: для майстра ключі where, getmaster, masterid зазвичай не задаються, а для детайлу — це основа зв’язування.

2) Зв’язок master → detail

2.1. Майстер (наприклад, dp2_zavdan_lab)

  • detile: dp2_zavdan_rows — оголошує, що під грідом майстра відображатиметься вкладка/панель з детальною таблицею.
  • У select майстра повинні бути всі ключові поля, які деталь зможе використати (наприклад, zavdanid).

2.2. Деталь (наприклад, dp2_zavdan_rows)

  • getmaster: true — переводить грід у детальний режим.
  • masterid: zavdanid — назва поля у деталі, що зберігає ID майстра.
  • where: " where (zavdanid='{masterid}')and(zavdanid<>) " — фільтр, який підставляє значення поточного рядка майстра у плейсхолдер {masterid}.

Схема роботи: користувач клікає рядок у майстрі → K2Grid читає zavdanid → підставляє його у where детайлу → перезавантажує грід детайлу.

3) Поля (розділ fields:)

Кожен елемент у fields: має внутрішнє ім’я (ключ на рівні YML) та набір атрибутів. Найчастіші атрибути:

Атрибут Опис
field Фактичне поле з select (ім’я стовпчика у результаті SQL).
alias Опційно: явна вказівка на table_alias.column у випадку конфліктів/JOINS.
caption Текст заголовка колонки у гріді / підпис у формі.
width Ширина колонки у гріді (пкс).
width_form Ширина елемента у формі (редакторі).
align left / center / right — вирівнювання у гріді.
readonly true/false — чи дозволено редагування у формі.
hidden true/false — чи ховати колонку у гріді.
type_field Тип редактора/віджета: date, datetime, checkbox, DropDown, condition, ін.
def_value Значення за замовчуванням при створенні (add).
search true/false — чи брати участь у пошуку/фільтрах.
editable Службовий прапорець для UI у деяких темах; зазвичай зайве, якщо є readonly.
sql (для довідників) SQL, який повертає k (ключ) і v (відображуване значення).
show_for Контроль видимості за user.id: кома‑розділений список ідентифікаторів користувачів, для яких поле показується. Напр.: "-1, 1" — видно лише користувачам з id = -1 і id = 1.
Примітка: show_for (ACL за user.id)

Поле show_for працює як простий ACL: якщо задано, елемент (колонка/кнопка) відображається лише тим користувачам, чиї user.id входять до списку. Приклад: show_for: "-1, 1" — видно користувачам з id −1 та 1. Якщо show_for не задано, елемент показується всім, хто має доступ до гріда загалом.

3.1. Спеціальні типи type_field

  1. date / datetime — відповідні календарні редактори.
  1. checkbox — логічний перемикач. Зручно у парі з def_value: 1 для активних записів.
  1. DropDown — довідник. Необхідно задати sql, що повертає k (ключ для збереження) та v (текст для відображення). Приклади:

<syntaxhighlight lang="yaml"> analysisid:

 field: analysisid
 alias: z.analysisid
 caption: Назва випробування
 type_field: DropDown
 width: 450
 width_form: 450
 sql: |
   select a.analysisid as k, CONCAT(tc.card_num,' ',a.analysis_name) as v
   from dp2analysis a
     left join templcard tc on a.templcardid=tc.templcardid
   where a.active=1
   order by tc.card_num, a.analysis_name

</syntaxhighlight>

<syntaxhighlight lang="yaml"> vidav_id:

 field: vidav_id
 alias: z.vidav_id
 caption: Видав
 type_field: DropDown
 sql: select laborantid as k, CONCAT(pip,' ',posada) as v from dp2laborants order by pip

</syntaxhighlight>

  1. condition — умовне поле‑дія (кнопка/іконка). Не зберігає значення в БД, використовується для запуску дій (дизайнер, друк, створення протоколу, редагування картки детайлу тощо). Ключі:
    • cond.exp — логічний вираз (можна тримати (false) аби завжди показувати варіант url2/caption2).
    • cond.url2 — куди перейти при кліку (можно зі змінними {zavdanid}, {dp2_zavdan_rowsid} тощо).
    • cond.caption2 — HTML іконка/підпис кнопки.
    • show_for — (опціонально) обмежити відображення за user.id; напр., "-1, 1" — видно тільки користувачам з id −1 та 1.

Приклад кнопок у майстрі:

<syntaxhighlight lang="yaml"> design:

 field: ' '
 caption: К
 width: 30
 type_field: condition
 show_for: "-1, 1"
 cond:
   exp: (false)
   url2: '/?adm=dp2lab_zavdan_lab&mode=admin&id={zavdanid}&op=designer'
   caption2: 

print:

 field: '  '
 caption: Д
 width: 30
 type_field: condition
 cond:
   exp: (false)
   url2: '/?adm=dp2lab_zavdan_lab&mode=admin&id={zavdanid}&op=print'
   caption2: 

</syntaxhighlight>

Приклад кнопки у детайлі (редагувати картку рядка):

<syntaxhighlight lang="yaml"> edit_card:

 field: ' '
 caption: Р
 width: 30
 type_field: condition
 cond:
   exp: (false)
   url2: '/?adm=dp2lab_zavdan_lab&mode=admin&op=edit_template&rowid={dp2_zavdan_rowsid}'
   caption2: 

</syntaxhighlight>

4) Вимоги до select

  • У майстрі select повинен повертати ключ майстра (наприклад, z.zavdanid) і всі поля, що відображаються.
  • У детайлі select обов’язково повертає:
    • власний ключ рядка (наприклад, z.dp2_zavdan_rowsid),
    • поле зв’язку з майстром (z.zavdanid),
    • усі колонки, що потрібні гріду.

Порада: для уникнення конфліктів імен використовуйте alias: з префіксом таблиці (наприклад, alias: z.zavdan_date).

5) Сортування, пошук, ширини, вирівнювання

  • sortname/sortorder — глобальне сортування гріда.
  • width задає ширину у гріді; width_form — у формі.
  • align — left, center, right залежно від типу даних (дати/текст/числа).
  • search: false — вимкніть пошук для службових стовпчиків (кнопок, ID, службових полів).

6) Режими відображення/редагування

  • readonly: true/false у полі — контролює редагування у формах add/edit.
  • hidden: true — ховає колонку у гріді (залишається доступною у формі, якщо не заборонено окремо).
  • За потреби можна розширити контролі видимості окремими секціями show: (list/add/edit/view), якщо це підтримується вашою збіркою K2Grid.

7) Плейсхолдери у URL/WHERE

Доступні плейсхолдери підставляються зі значень поточного рядка:

  • {zavdanid}, {dp2_zavdan_rowsid}, {masterid} тощо.
  • У детайлі найчастіше використовується {masterid} у where:.

Приклад:

<syntaxhighlight lang="yaml"> where: " where (zavdanid='{masterid}')and(zavdanid<>) " </syntaxhighlight>

8) Мінімальні шаблони (готові каркаси)

8.1. Майстер (dp2_zavdan_lab)

<syntaxhighlight lang="yaml"> select: |

 select z.zavdanid, ... , lab.login
 from dp2_zavdan_lab z
   left join dp2laborants lab on z.vidav_id=lab.laborantid

table: dp2_zavdan_lab typeid: 1 caption: Завдання на проведення випробувань sortname: order_ins sortorder: desc height: 300 detile: dp2_zavdan_rows

fields:

 templcardid:
   field: zavdanid
   alias: z.zavdanid
   caption: ID
   hidden: true
   readonly: true
 # ... інші колонки, кнопки condition, довідники DropDown, дати, чекбокси

</syntaxhighlight>

8.2. Деталь (dp2_zavdan_rows)

<syntaxhighlight lang="yaml"> select: |

 select z.dp2_zavdan_rowsid, z.zavdanid, ...
 from dp2_zavdan_rows z

table: dp2_zavdan_rows typeid: 1 caption: Перелік випробувань sortname: order_ins sortorder: asc getmaster: true masterid: zavdanid where: " where (zavdanid='{masterid}')and(zavdanid<>) "

fields:

 templcardid:
   field: dp2_zavdan_rowsid
   alias: z.dp2_zavdan_rowsid
   caption: ID
   hidden: true
   readonly: true
 # ... інші колонки, кнопки condition, довідники DropDown, чекбокси

</syntaxhighlight>

9) Перевірочний чек‑лист перед публікацією

  1. SQL select повертає всі поля, зазначені у fields: (включно зі службовими ID).
  1. Для майстра задано detile: <ім'я_детальної_таблиці>.
  1. Для деталі встановлено getmaster: true, masterid: <поле_зв’язку> і правильний where з {masterid}.
  1. У деталі у select присутнє поле‑зв’язка з майстром (напр., zavdanid).
  1. У DropDown‑полях SQL повертає k та v з доречним order by.
  1. condition‑кнопки мають коректні url2 і плейсхолдери.
  1. width/align/search/readonly/hidden виставлені з урахуванням UX.
  1. Не забуті def_value там, де потрібні (наприклад, active: 1).

10) Типові помилки й як їх уникати

  • Відсутня колонка в select, але вона згадана у fields: → отримаєте помилку мапінгу/рендеру. Додайте поле в SQL або приберіть з fields:.
  • Неправильний alias при JOIN → колізії імен. Явно вказуйте alias: z.field.
  • Забутий getmaster/masterid/where у деталі → деталь не фільтрується за активним майстром.
  • У DropDown‑sql повертаються не k/v → селект не побудується. Забезпечте точні імена стовпців.
  • Встановлено search: true для службових полів‑кнопок → зайвий шум у пошуку. Вимикайте.

11) Поради з UX та продуктивності

  • Тримайте службові кнопки (типу condition) вузькими (width: 30–40).
  • Числові колонки вирівнюйте праворуч (align: right), дати — ліворуч/по центру.
  • Для великих довідників у DropDown додайте розумний order by, а також фільтри where a.active=1.
  • Виносьте важкі обчислення у представлення/види БД (view), а в select — мінімум потрібних полів.

12) Приклад фрагментів з ваших файлів (адаптовані)

Кнопки в майстрі

<syntaxhighlight lang="yaml"> create_proto:

 field: ' '
 caption: С
 width: 30
 type_field: condition
 cond:
   exp: (false)
   url2: '/?adm=dp2lab_zavdan_lab&mode=admin&id={zavdanid}&op=create_protokol'
   caption2: 

</syntaxhighlight>

Довідник «Відповідальний виконавець» у детайлі

<syntaxhighlight lang="yaml"> card_comment:

 field: laborantid
 alias: z.laborantid
 caption: Відповідальний виконавець
 type_field: DropDown
 width: 400
 sql: |
   select l.laborantid as k, CONCAT(l.pip, " | ", labs.adress) as v
   from dp2laborants l
     left join dplabs labs on l.labid=labs.labid
   order by labs.adress, pip

</syntaxhighlight>

13) Швидкий старт: з нуля до пари master–detail

  1. Створіть майстер YML: пропишіть select, table, caption, sortname, sortorder, height, додайте detile: <detail_name>.
  1. Додайте поля: ID (hidden/readonly), інформативні колонки, потрібні кнопки condition, довідники DropDown, дати/чекбокси.
  1. Створіть деталь YML: пропишіть select (включно з <master_key>), table, caption, sort*, getmaster: true, masterid: <master_key>, where з {masterid}.
  1. Додайте поля деталі: ID, <master_key> (можна приховати), довідники, черговість order_ins, active тощо.
  1. Перевірте чек‑лист (розд. 9), задеплойте обидва YML.

Додатково

  • За потреби опишіть кастомні ролі та використовуйте show_for для кнопок‑дій.
  • Для друку/експорту — робіть окремі condition‑поля з чіткими url2.
  • Для динамічних фільтрів можна додавати власні плейсхолдери (залежно від вашої збірки K2Grid).

Приклад YML двох таблиць, пов’язаних за допомогою Master-Detile:

Master:

<syntaxhighlight lang="yaml"> select: select z.zavdanid, z.zajavkid, z.zavdan_num, z.zavdan_date, z.vidav_id, z.zajavn, z.active,

           z.vaga_total, z.vaga_chist, z.vaga_volog, z.vaga_hvorob, z.date_begin, z.date_end, z.createuser,
           z.updatedate, z.updateuser, z.createdate, z.order_ins, lab.login
   
       from dp2_zavdan_lab z    
   
           left join dp2laborants lab
           on z.vidav_id=lab.laborantid

table: dp2_zavdan_lab typeid: 1 sortname: order_ins sortorder: desc caption: Завдання на проведення випробувань height: 300 detile: dp2_zavdan_rows fields:

   templcardid:
       field: zavdanid
       alias: z.zavdanid
       caption: ID
       width: 120
       readonly: true
       align: left
       hidden: true
   design:
       field: ' '
       caption: К
       width: 30
       readonly: true
       search: false
       align: center
       type_field: condition
       # Показывать поле для пользователей с правами:
       show_for: "-1, 1"
       cond:
           exp: (false)
           url2: '/?adm=dp2lab_zavdan_lab&mode=admin&id={zavdanid}&op=designer'
           caption2: 
           readonly: true
   print:
       field: '  '
       caption: Д
       width: 30
       search: false
       readonly: true
       align: center
       type_field: condition
       cond:
           exp: (false)
           url2: '/?adm=dp2lab_zavdan_lab&mode=admin&id={zavdanid}&op=print'
           caption2: 
   create_proto:
       field: '   '
       caption: С
       width: 30
       search: false
       readonly: true
       align: center
       type_field: condition
       cond:
           exp: (false)
           url2: '/?adm=dp2lab_zavdan_lab&mode=admin&id={zavdanid}&op=create_protokol'
           caption2: 
   card_num:
       field: zavdan_num
       alias: z.zavdan_num
       caption: Проба №
       width: 120
       readonly: false
       align: right
   zajavn:
       field: zajavn
       alias: z.zajavn
       caption: Заявка №
       width: 120
       readonly: false
       align: right
   zavdan_date:
       field: zavdan_date
       alias: z.zavdan_date
       caption: Дата
       width: 150
       type_field: date
       readonly: false
       align: left
   vaga_total:
       field: vaga_total
       alias: z.vaga_total
       caption: Вага зразка
       width: 120
       readonly: false
       align: right
   vaga_chist:
       field: vaga_chist
       alias: z.vaga_chist
       caption: Вага на чистоту
       width: 120
       readonly: false
       align: right
   vaga_volog:
       field: vaga_volog
       alias: z.vaga_volog
       caption: Вага на вологість
       width: 140
       readonly: false
       align: right
   vaga_hvorob:
       field: vaga_hvorob
       alias: z.vaga_hvorob
       caption: Вага на зараженість
       width: 160
       readonly: false
       align: right
   date_begin:
       field: date_begin
       alias: z.date_begin
       caption: Дата початку
       width: 150
       type_field: date
       readonly: false
       align: left
   date_end:
       field: date_end
       alias: z.date_end
       caption: Дата кінця
       width: 150
       type_field: date
       readonly: false
       align: left
   vidav_id:
       field: vidav_id
       alias: z.vidav_id
       caption: Видав завдання
       width: 400
       type_field: DropDown
       readonly: true
       align: left
       sql: select laborantid as k, CONCAT(pip,' ',posada) as v from dp2laborants order by pip
   createuser:
       field: createuser
       alias: z.createuser
       width: 150
       caption: Створив
       align: left
       editable: false
       hidden: false
       readonly: true
   createdate:
       field: createdate
       alias: z.createdate
       width: 150
       caption: Створено
       align: left
       editable: false
       hidden: false
       type_field: datetime
       readonly: true
  1. show:
  2. list: false
  3. add: false
  4. edit: false
  5. view: true
   updateuser:
       field: updateuser
       alias: z.updateuser
       width: 150
       caption: Змінив
       align: left
       editable: false
       hidden: false
       readonly: true
   updatedate:
       field: updatedate
       alias: z.updatedate
       width: 150
       caption: Змінено
       align: left
       editable: false
       hidden: false
       type_field: datetime
       readonly: true
   order_ins:
       field: order_ins
       alias: z.order_ins
       width: 150
       caption: Порядок
       align: left
       editable: false
       hidden: false
       readonly: true
   active:
       field: active
       alias: z.active
       caption: Вкл
       width: 40
       type_field: checkbox
       readonly: false
       align: center
       def_value: 1

</syntaxhighlight>

Detile:

<syntaxhighlight lang="yaml"> select: select z.dp2_zavdan_rowsid, z.zavdanid, z.dstu_name, z.analysisid, z.laborantid, z.active, z.order_ins

       from dp2_zavdan_rows z

table: dp2_zavdan_rows typeid: 1 sortname: order_ins sortorder: asc caption: Перелік випробувань where: " where (zavdanid='{masterid}')and(zavdanid<>) " getmaster: true masterid: zavdanid

fields:

   templcardid:
       field: dp2_zavdan_rowsid
       alias: z.dp2_zavdan_rowsid
       caption: ID
       width: 120
       readonly: true
       align: left
       hidden: true
   edit_card:
       field: ' '
       caption: Р
       width: 30
       readonly: true
       search: false
       align: center
       type_field: condition
       # Показывать поле для пользователей с правами:
       #show_for: "-1, 1"
       cond:
           exp: (false)
           url2: '/?adm=dp2lab_zavdan_lab&mode=admin&op=edit_template&rowid={dp2_zavdan_rowsid}'
           caption2: 
           readonly: true
   analysisid:
       field: analysisid
       alias: z.analysisid
       caption: Назва випробування
       type_field: DropDown
       width: 450
       width_form: 450
       readonly: false
       align: left
       sql: "select a.analysisid as k, CONCAT(tc.card_num,' ',a.analysis_name) as v
            from dp2analysis a
   
               left join templcard tc
               on a.templcardid=tc.templcardid
   
           where a.active=1
           order by tc.card_num, a.analysis_name"
   temp_name:
       field: dstu_name
       alias: z.dstu_name
       caption: ДСТУ
       width: 150
       readonly: false
       align: left
   card_comment:
       field: laborantid
       alias: z.laborantid
       caption: Відповідальний виконавець
       width: 400
       type_field: DropDown
       readonly: false
       align: left
       sql: |
               select l.laborantid as k, CONCAT(l.pip," | ",labs.adress) as v
               from dp2laborants l
   
                   left join dp2labs labs
                   on l.labid=labs.labid
   
               order by labs.adress, pip
   order_num:
       field: order_ins
       alias: z.order_ins
       caption: Сорт
       width: 75
       readonly: true
       align: right
   active:
       field: active
       alias: z.active
       caption: Вкл
       width: 40
       type_field: checkbox
       readonly: false
       align: center
       def_value: 1

</syntaxhighlight>

Налаштування форми в таблиці

Приклад YML таблиці:

select: 'SELECT protokolid, prot_num, country_poh_nas, vyrobleno, obrobka, prot_data, zovn_vygl_colir, zovn_vygl_zapah, chystota, vmist_osnkult, vmist_obrush, vmist_prorosl,

vyhid, perevag_group, vmist_inshvyd, vmist_kult, insh_kult, vmist_zlisn, shogist, normalnogo, anomaln, tverdogo, gyttezdatn, zignilogo, neprorosli,

vologist, masa1000, zaragenist, poverhn_inf, fuzarioz, sim_bakterioz, sklsirbilgnyl, mishsazh, rizhky, sklkonraktyf, sazhkmish,

inshi_chystota, inshi_vmist, inshi_hvor_pov, inshi_hvor_vn, inshi_hvor_gr, goroh_zer, date_sert_sort, byte_chystota,

vnutr_inf, gryb_utv, zasel_shkidn, insh_shkid, zhuk, dstu, dstu_metod, zajavkid, aktvypr_date, aktvypr_num, umovy, zajav_navypr, date_zajav_navypr, meta, is_meta,

tryvalist, inshi_kategorii, naybshkidl, vagkovidokreml, sert_ista, insh_doc, date_sert_insh, vyrobn_part, buryaniv, insh_bur, vymog_markuv, laborant, date_oderg, date_proved, date_proved_to, reestr_num, laborant_vidp, is_vysnov, is_vidpov,

usercreate, datecreate, userupdate, dateupdate, is_close, nakaz, is_cond, add_dstu, oecd, invoice, gmo, razresh_vidat_cert, opys_zrazka, vmist_oblushch, vmist_zernov,

vmist_otruynyh, vmist_karantyn, bakterioz, plisnyavinnya, fomopsys, is_vlasn

FROM dp2_protokol_zern

'

where: WHERE (zajavkid='<%zajavkid%>')

table: dp2_protokol_zern

typeid: 1

is_edit: true

is_clone: false

  1. is_del: false

autowidth: false

width: 100%

  1. height: 800

form_width: 1400

data_width: 1390

form_height: 700

data_height: 450

form_script: offAutocomlite();showKult();$('editmoddp2_protokol_zern').attr('height','100px');$('#tr_zajavkid').hide();

readonly_form:

0: prot_num

1: zajavkid

  1. masterid: zajavkid

footer: true

sortname: order_ins

sortorder: desc

caption: Протокол випробувань зернові (A)

custom_form: false

fields:

protokolid:

field: protokolid

alias: protokolid

caption: ID протоколу

width: 120

readonly: true

align: center

hidden: true

D:

field: ' '

caption: Д

width: 30

readonly: true

search: false

align: center

type_field: condition

cond:

class: anone

exp: (false)

url2: '/?adm=k2dp2_protokol&mode=admin&id={protokolid}&zajavkid={zajavkid}&group=1&op=print&temp=print'

target2: _blank

caption2:

              1. Этот блок должен быть с супер-администратором ###########

K:

field: ' '

caption: К

width: 30

readonly: true

search: false

align: center

type_field: condition

cond:

class: anone

exp: (false)

url2: '/?adm=k2dp2_protokol&mode=admin&id={protokolid}&zajavkid={zajavkid}&group=1&op=designer&temp=print'

target2: _blank

caption2:

show_for: "-1, 1"

              1. Конец блока. Этот блок должен быть с супер-администратором ###########

translate:

field: translate

caption: Видати документ

width: 150

readonly: true

align: center

type_field: condition

cond:

exp: '(false)'

target2: _self

caption2: "<button class='' onclick='closeProtokol(\"{zajavkid}\", \"{is_vidpov}\", \"{shogist}\")' href='javascript:void(0)'>Видати документ</button>"

  1. notcond:
  1. field: notcond
  1. caption: Конд.
  1. width: 50
  1. readonly: true
  1. align: center
  1. type_field: condition
  1. cond:
  1. exp: '$row["is_cond"] == 0'
  1. url2:
  1. target2: _self
  1. caption2: "<button class='' onclick='notCond(\"{zajavkid}\", 0)' href='javascript:void(0)'></button>"
  1. url1:
  1. target1: _self
  1. caption1: "<button class='' onclick='notCond(\"{zajavkid}\", 1)' href='javascript:void(0)'></button>"

is_vlasn:

field: is_vlasn

alias: is_vlasn

caption: Протокол на вл. потр.

width: 75

readonly: false

align: center

type_field: checkbox

prot_num:

field: prot_num

alias: prot_num

caption: Номер протоколу

width: 75

readonly: false

align: center

prot_data:

field: prot_data

alias: prot_data

caption: Дата протоколу

width: 75

readonly: false

align: center

type_field: date

  1. zajav_navypr:
  1. field: zajav_navypr
  1. alias: zajav_navypr
  1. caption: Заявка на випробування
  1. width: 75
  1. readonly: false
  1. align: center
  1. date_zajav_navypr:
  1. field: date_zajav_navypr
  1. alias: date_zajav_navypr
  1. caption: Дата заявка на випробування
  1. width: 75
  1. readonly: false
  1. align: center
  1. type_field: date
  1. meta:
  1. field: meta
  1. alias: meta
  1. caption: Мета
  1. width: 75
  1. readonly: false
  1. align: center
  1. is_meta:
  1. field: is_meta
  1. alias: is_meta
  1. caption: Мета так/ні
  1. width: 75
  1. readonly: false
  1. align: center
  1. type_field: checkbox

aktvypr_num:

field: aktvypr_num

alias: aktvypr_num

caption: Акт відбір проб

width: 75

readonly: false

align: center

aktvypr_date:

field: aktvypr_date

alias: aktvypr_date

caption: Дата акту

width: 75

readonly: false

align: center

type_field: date

  1. country_poh_nas:
  1. field: country_poh_nas
  1. alias: country_poh_nas
  1. caption: Країна походження насіння
  1. width: 75
  1. readonly: false
  1. align: center
  1. vyrobleno:
  1. field: vyrobleno
  1. alias: vyrobleno
  1. caption: Вироблено
  1. width: 75
  1. readonly: false
  1. align: center
  1. sert_ista:
  1. field: sert_ista
  1. alias: sert_ista
  1. caption: сертифікат сортовий
  1. width: 75
  1. readonly: false
  1. align: center
  1. #
  1. date_sert_sort:
  1. field: date_sert_sort
  1. alias: date_sert_sort
  1. caption: дата видачі сортовий
  1. width: 75
  1. readonly: false
  1. align: center
  1. type_field: date
  1. insh_doc:
  1. field: insh_doc
  1. alias: insh_doc
  1. caption: інші документи про походження насіння посівний|ISTA
  1. width: 75
  1. readonly: false
  1. align: center
  1. # type_field: textarea
  1. oecd:
  1. field: oecd
  1. alias: oecd
  1. caption: ОЕСР
  1. width: 75
  1. readonly: false
  1. align: center
  1. invoice:
  1. field: invoice
  1. alias: invoice
  1. caption: Інвойс
  1. width: 75
  1. readonly: false
  1. align: center
  1. gmo:
  1. field: gmo
  1. alias: gmo
  1. caption: ГМО
  1. width: 75
  1. readonly: false
  1. align: center
  1. date_sert_insh:
  1. field: date_sert_insh
  1. alias: date_sert_insh
  1. caption: дата видачі інших документів
  1. width: 75
  1. readonly: false
  1. align: center
  1. type_field: date
  1. vyrobn_part:
  1. field: vyrobn_part
  1. alias: vyrobn_part
  1. caption: виробнича партія
  1. width: 75
  1. readonly: false
  1. align: center

date_oderg:

field: date_oderg

alias: date_oderg

caption: Дата одержання проби

width: 75

readonly: false

align: center

type_field: date

date_proved:

field: date_proved

alias: date_proved

caption: Дата проведення від

width: 75

readonly: false

align: center

type_field: date

date_proved_to:

field: date_proved_to

alias: date_proved_to

caption: Дата проведення по

width: 75

readonly: false

align: center

type_field: date

  1. obrobka:
  1. field: obrobka
  1. alias: obrobka
  1. caption: Обробка насіння
  1. width: 75
  1. readonly: false
  1. align: center
  1. vymog_markuv:
  1. field: vymog_markuv
  1. alias: vymog_markuv
  1. caption: Вимоги маркування (етикетки)
  1. width: 75
  1. readonly: false
  1. align: center
  1. type_field: textarea

opys_zrazka:

field: opys_zrazka

alias: opys_zrazka

caption: Опис та стан зразка

width: 75

readonly: false

align: center

zovn_vygl_colir:

field: zovn_vygl_colir

alias: zovn_vygl_colir

caption: 1. Зовн. огляд, колір

width: 75

readonly: false

align: center

zovn_vygl_zapah:

field: zovn_vygl_zapah

alias: zovn_vygl_zapah

caption: 1. Зовн. огляд, запах

width: 75

readonly: false

align: center

  1. chystota:
  1. field: chystota
  1. alias: chystota
  1. caption: 2. Чистота, %
  1. width: 75
  1. readonly: false
  1. align: center

vmist_osnkult:

field: vmist_osnkult

alias: vmist_osnkult

caption: 2. Чистота, %

Вміст насіння, осн культури

width: 75

readonly: false

align: center

vmist_obrush:

field: vmist_obrush

alias: vmist_obrush

caption: - обрушеного

width: 75

readonly: false

align: center

  1. formoptions:
  1. rowpos: 1
  1. colpos: 2

vmist_oblushch:

field: vmist_oblushch

alias: vmist_oblushch

caption: - облущеного

width: 75

readonly: false

align: center

vmist_prorosl:

field: vmist_prorosl

alias: vmist_prorosl

caption: - пророслого

width: 75

readonly: false

align: center

  1. formoptions:
  1. rowpos: 1
  1. colpos: 2

inshi_chystota:

field: inshi_chystota

alias: inshi_chystota

caption: - інші види

width: 75

readonly: false

align: center

vyhid:

field: vyhid

alias: vyhid

caption: 3. Відхід, %

width: 75

readonly: false

align: center

perevag_group:

field: perevag_group

alias: perevag_group

caption: - у тому числі

переважальні групи

width: 75

readonly: false

align: center

  1. byte_chystota:
  1. field: byte_chystota
  1. alias: byte_chystota
  1. caption: бите
  1. width: 75
  1. readonly: false
  1. align: center

vmist_inshvyd:

field: vmist_inshvyd

alias: vmist_inshvyd

caption: 4. Вміст насіння інших

видів, шт/кг

width: 75

readonly: false

align: center

formoptions:

rowpos: 1

colpos: 2

vmist_kult:

field: vmist_kult

alias: vmist_kult

caption: у тому числі

- вміст культурних

width: 75

readonly: false

align: center

formoptions:

rowpos: 2

colpos: 2

vmist_zernov:

field: vmist_zernov

alias: vmist_zernov

caption: з них зернові

width: 75

readonly: false

align: center

formoptions:

rowpos: 3

colpos: 2

  1. insh_kult:
  1. field: insh_kult
  1. alias: insh_kult
  1. caption: у тому числі
  1. width: 75
  1. readonly: false
  1. align: center
  1. formoptions:
  1. rowpos: 3
  1. colpos: 2

buryaniv:

field: buryaniv

alias: buryaniv

caption: - бур`янів

width: 75

readonly: false

align: center

formoptions:

rowpos: 4

colpos: 2

  1. insh_bur:
  1. field: insh_bur
  1. alias: insh_bur
  1. caption: у тому числі
  1. width: 75
  1. readonly: false
  1. align: center
  1. formoptions:
  1. rowpos: 5
  1. colpos: 2

vmist_zlisn:

field: vmist_zlisn

alias: vmist_zlisn

caption: з них

- злісних

width: 75

readonly: false

align: center

formoptions:

rowpos: 5

colpos: 2

naybshkidl:

field: naybshkidl

alias: naybshkidl

caption: - найбільш шкідливі, шт/кг

width: 75

readonly: false

align: center

formoptions:

rowpos: 6

colpos: 2

vagkovidokreml:

field: vagkovidokreml

alias: vagkovidokreml

caption: - важковідокремлювані

width: 75

readonly: false

align: center

formoptions:

rowpos: 7

colpos: 2

vmist_otruynyh:

field: vmist_otruynyh

alias: vmist_otruynyh

caption: - отруйних

width: 75

readonly: false

align: center

formoptions:

rowpos: 8

colpos: 2

vmist_karantyn:

field: vmist_karantyn

alias: vmist_karantyn

caption: - карантинних

width: 75

readonly: false

align: center

formoptions:

rowpos: 9

colpos: 2

inshi_vmist:

field: inshi_vmist

alias: inshi_vmist

caption: - інші види

width: 75

readonly: false

align: center

formoptions:

rowpos: 10

colpos: 2

shogist:

field: shogist

alias: shogist

caption: 5. Схожість, %

width: 75

readonly: false

align: center

formoptions:

rowpos: 11

colpos: 2

umovy:

field: umovy

alias: umovy

caption: Умови проведення аналізу

width: 75

readonly: false

align: center

formoptions:

rowpos: 12

colpos: 2

tryvalist:

field: tryvalist

alias: tryvalist

caption: Тривалість днів

width: 75

readonly: false

align: center

formoptions:

rowpos: 13

colpos: 2

normalnogo:

field: normalnogo

alias: normalnogo

caption: - нормально пророслого насіння

(енергія проростання)

width: 75

readonly: false

align: center

formoptions:

rowpos: 14

colpos: 2

anomaln:

field: anomaln

alias: anomaln

caption: - аномальних проростків

width: 75

readonly: false

align: center

formoptions:

rowpos: 15

colpos: 2

tverdogo:

field: tverdogo

alias: tverdogo

caption: - твердого насіння

width: 75

readonly: false

align: center

formoptions:

rowpos: 16

colpos: 2

gyttezdatn:

field: gyttezdatn

alias: gyttezdatn

caption: - у тому числі життєздатного

width: 75

readonly: false

align: center

formoptions:

rowpos: 17

colpos: 2

zignilogo:

field: zignilogo

alias: zignilogo

caption: - зігниле

width: 75

readonly: false

align: center

formoptions:

rowpos: 18

colpos: 2

neprorosli:

field: neprorosli

alias: neprorosli

caption: - непроросле здорове

width: 75

readonly: false

align: center

formoptions:

rowpos: 19

colpos: 2

inshi_kategorii:

field: inshi_kategorii

alias: inshi_kategorii

caption: Життєздатність

width: 75

readonly: false

align: center

formoptions:

rowpos: 20

colpos: 2

vologist:

field: vologist

alias: vologist

caption: 6. Вологість,%

width: 75

readonly: false

align: center

formoptions:

rowpos: 21

colpos: 2

masa1000:

field: masa1000

alias: masa1000

caption: 7. Маса 1 тис.

насінин, г

width: 75

readonly: false

align: center

formoptions:

rowpos: 22

colpos: 2

zaragenist:

field: zaragenist

alias: zaragenist

caption: 8. Зараженість хворобами,

% або шт/кг

width: 75

readonly: false

align: center

formoptions:

rowpos: 23

colpos: 2

poverhn_inf:

field: poverhn_inf

alias: poverhn_inf

caption: наявність поверхневої

інфекції, %

width: 75

readonly: false

align: center

formoptions:

rowpos: 1

colpos: 3

fuzarioz:

field: fuzarioz

alias: fuzarioz

caption: - фузаріоз

width: 75

readonly: false

align: center

formoptions:

rowpos: 2

colpos: 3

bakterioz:

field: bakterioz

alias: bakterioz

caption: - бактеріоз

width: 75

readonly: false

align: center

formoptions:

rowpos: 3

colpos: 3

sim_bakterioz:

field: sim_bakterioz

alias: sim_bakterioz

caption: - сім҆ядольний бактеріоз

width: 75

readonly: false

align: center

formoptions:

rowpos: 4

colpos: 3

plisnyavinnya:

field: plisnyavinnya

alias: plisnyavinnya

caption: - пліснявіння

width: 75

readonly: false

align: center

formoptions:

rowpos: 5

colpos: 3

inshi_hvor_pov:

field: inshi_hvor_pov

alias: inshi_hvor_pov

caption: - інші показники

width: 75

readonly: false

align: center

formoptions:

rowpos: 6

colpos: 3

vnutr_inf:

field: vnutr_inf

alias: vnutr_inf

caption: наявність внутрішньої

інфекції, %

width: 75

readonly: false

align: center

formoptions:

rowpos: 7

colpos: 3

inshi_hvor_vn:

field: inshi_hvor_vn

alias: inshi_hvor_vn

caption: - інші показники

width: 75

readonly: false

align: center

formoptions:

rowpos: 8

colpos: 3

fomopsys:

field: fomopsys

alias: fomopsys

caption: - фомопсис

width: 75

readonly: false

align: center

formoptions:

rowpos: 9

colpos: 3

gryb_utv:

field: gryb_utv

alias: gryb_utv

caption: наявність грибних утворень,

% або шт\кг.

width: 75

readonly: false

align: center

formoptions:

rowpos: 10

colpos: 3

sklsirbilgnyl:

field: sklsirbilgnyl

alias: sklsirbilgnyl

caption: - склероції сірої та

білої гнилей

width: 75

readonly: false

align: center

formoptions:

rowpos: 11

colpos: 3

mishsazh:

field: mishsazh

alias: mishsazh

caption: - сажкові утворення

width: 75

readonly: false

align: center

formoptions:

rowpos: 12

colpos: 3

sklkonraktyf:

field: sklkonraktyf

alias: sklkonraktyf

caption: - конюшинового

width: 75

readonly: false

align: center

formoptions:

rowpos: 13

colpos: 3

rizhky:

field: rizhky

alias: rizhky

caption: - ріжки, шт/кг

width: 75

readonly: false

align: center

formoptions:

rowpos: 14

colpos: 3

  1. sazhkmish:
  1. field: sazhkmish
  1. alias: sazhkmish
  1. caption: - сажкові мішечки та їхні частини
  1. width: 75
  1. readonly: false
  1. align: center
  1. formoptions:
  1. rowpos: 12
  1. colpos: 3

inshi_hvor_gr:

field: inshi_hvor_gr

alias: inshi_hvor_gr

caption: гали пшеничної нематоди

width: 75

readonly: false

align: center

formoptions:

rowpos: 15

colpos: 3

zasel_shkidn:

field: zasel_shkidn

alias: zasel_shkidn

caption: 9. Заселеність шкідниками,

шт./кг

width: 75

readonly: false

align: center

formoptions:

rowpos: 16

colpos: 3

zhuk:

field: zhuk

alias: zhuk

caption: - кліщ

width: 75

readonly: false

align: center

formoptions:

rowpos: 17

colpos: 3

goroh_zer:

field: goroh_zer

alias: goroh_zer

caption: - горохова зернівка

width: 75

readonly: false

align: center

formoptions:

rowpos: 18

colpos: 3

insh_shkid:

field: insh_shkid

alias: insh_shkid

caption: - інші види шкідників

width: 75

readonly: false

align: center

formoptions:

rowpos: 19

colpos: 3

is_vidpov:

field: is_vidpov

alias: is_vidpov

caption: Відповідає вимогам

ДСТУ так/ні

width: 75

readonly: false

align: center

type_field: checkbox

formoptions:

rowpos: 20

colpos: 3

  1. is_vysnov:
  1. field: is_vysnov
  1. alias: is_vysnov
  1. caption: Висновок так/ні
  1. width: 75
  1. readonly: false
  1. align: center
  1. type_field: checkbox
  1. formoptions:
  1. rowpos: 17
  1. colpos: 3

dstu:

field: dstu

alias: dstu

caption: ДСТУ на об`єкт випробувань

width: 175

readonly: false

align: center

type_field: DropDown

sql: select null as k, '_' as v union select dstuid as k, dstu_name as v from dp2_dstu where inprot = 1

formoptions:

rowpos: 21

colpos: 3

dstu_metod:

field: dstu_metod

alias: dstu_metod

caption: ДСТУ на метод випробувань

width: 175

readonly: false

align: center

type_field: DropDown

sql: select null as k, '_' as v union select dstuid as k, dstu_name as v from dp2_dstu where inprot = 1

formoptions:

rowpos: 22

colpos: 3

add_dstu:

field: add_dstu

alias: add_dstu

caption: Дод. ДСТУ

width: 75

readonly: false

align: center

formoptions:

rowpos: 23

colpos: 3

nakaz:

field: nakaz

alias: nakaz

caption: Наказ

width: 75

readonly: false

align: center

type_field: DropDown

sql: select null as k, '_' as v union select nakazid as k, nakaz_name as v from dp2_nakaz

formoptions:

rowpos: 24

colpos: 3

laborant:

field: laborant

alias: laborant

caption: Інженер-лаборант

width: 75

readonly: false

align: center

formoptions:

rowpos: 25

colpos: 3

razresh_vidat_cert:

field: razresh_vidat_cert

alias: razresh_vidat_cert

caption: Відповідальний

за складання протоколу

width: 75

readonly: false

align: center

formoptions:

rowpos: 26

colpos: 3

laborant_vidp:

field: laborant_vidp

alias: laborant_vidp

caption: Начальник

випробувальної лабораторії

width: 75

readonly: false

align: center

formoptions:

rowpos: 27

colpos: 3

  1. 27:
  1. field: usercreate
  1. alias: usercreate
  1. caption: Створив
  1. width: 75
  1. readonly: true
  1. align: center
  1. type_field: DropDown
  1. sql: select user_id as k, login as v from k2users
  1. 28:
  1. field: datecreate
  1. alias: datecreate
  1. caption: Коли створив
  1. width: 100
  1. readonly: true
  1. align: center
  1. type_field: datetime
  1. def_value: <%Now%>
  1. formoptions:
  1. rowpos: 48
  1. colpos: 2
  1. 29:
  1. field: userupdate
  1. alias: userupdate
  1. caption: Змінив
  1. width: 75
  1. readonly: true
  1. align: center
  1. type_field: DropDown
  1. sql: select user_id as k, login as v from k2users
  1. 30:
  1. field: dateupdate
  1. alias: dateupdate
  1. caption: Коли змінено
  1. width: 100
  1. readonly: true
  1. align: center
  1. type_field: datetime
  1. def_value: <%Now%>
  1. formoptions:
  1. rowpos: 50
  1. colpos: 2

zajavkid:

field: zajavkid

alias: z.zajavkid

caption: ID заявки

width: 120

readonly: false

align: center

hidden: false

def_value: "<%zajavkid%>"

is_close:

field: is_close

alias: is_close

caption: is_closei

width: 0.5

readonly: true

align: center

is_cond:

field: is_cond

alias: is_cond

caption: is_condi

width: 9.5

readonly: true

align: center

Результат виконання:

1) Керування вікном форми (глобально для Add/Edit/View)

Де задається

  • На рівні грида:
add_options: {...} — для форми «Додати»
edit_options: {...} — для форми «Редагувати»
view_options: {...} — для форми «Перегляд»

Що реально працює й для чого

  • width — ширина вікна (px або %), напр. 1000 або "90%".
  • height — висота вікна (px або %), напр. "90%".
  • modal — модальність (true|false).
  • position — позиція вікна ("center" або {top:60,left:80}).
  • recreateForm — створювати форму щоразу наново (часто потрібне) (true|false).
  • closeAfterAdd / closeAfterEdit — закривати після збереження (true|false).
  • checkOnSubmit — попередження при незаповнених/помилкових полях.
  • savekey — гарячі клавіші збереження, напр. {enter:true}.

Порада: якщо ставиш height: "90%", часто корисно у своєму CSS для контейнера форми дозволити вертикальний скрол, щоб контент не “вилазив” із модалки.

2) Позиції та розміри полів (на рівні колонки)

Де задається

  • У кожній колонці:
    • formoptions: {...} — тільки для відображення в формі
    • edittype — тип редактора
    • editoptions: {...} — опції редактора
    • editrules: {...} — правила валідації

Позиціювання (гратися «сіткою» форми)

  • formoptions.rowpos — номер рядка (1, 2, 3, …)
  • formoptions.colpos — номер колонки (1, 2, 3)
Це — єдиний офіційний спосіб розставити інпут по рядках/колонках у стандартному редакторі phpGrid/jqGrid.
  • formoptions.elmprefix / formoptions.elmsuffix — невеличкий текст перед/після інпуту (зручно для одиниць: %, г, шт/кг)

Ширина/висота самого інпута (а не колонки грида)

  • Для edittype: "text":
editoptions.size — видима ширина інпута (в «символах»)
editoptions.maxlength — максимум символів
  • Для edittype: "textarea":
editoptions.rows та editoptions.cols
  • Для числових/текстових полів у більшості випадків вистачає комбінації:
    • formoptions.colpos/rowpos для розміщення,
    • editoptions.size/rows/cols для розміру інпута,
    • formoptions.elmsuffix для одиниці виміру.

Типи редакторів (типові)

  • edittype: "text" | "textarea" | "select" | "checkbox" | "date"
(інші кастомні — уже твоєю ініціалізацією через dataInit)

Джерело для select

  • edittype: "select"
  • editoptions.value — словник або id:label;id2:label2
або
  • editoptions.dataUrl + editoptions.buildSelect (для підвантаження HTML <select>)

Валідація

  • editrules.required: true
  • editrules.number: true / integer: true
  • editrules.minValue / maxValue
  • editrules.email: true / date: true / time: true

Ініціалізація віджетів (календар, маски тощо)

  • editoptions.dataInit: function (elem) { ... }
(JS-функція ініціалізує, наприклад, datepicker/flatpickr/mask на конкретному інпуті)

3) Мінімальний робочий приклад (вирізка YML)

Приклад показує:

• глобальне керування вікном через edit_options,
• розкладку полів формою через formoptions.rowpos/colpos,
• ширину полів через editoptions.size,
• одиниці виміру через formoptions.elmsuffix,
• валідацію чисел через editrules.
  1. --- Глобальне керування формою Редагування ---

edit_options:

width: 1000 # px або "90%"

height: "90%"

modal: true

position: center # або {top:60, left:80}

recreateForm: true

closeAfterEdit: false

checkOnSubmit: true

savekey: { enter: true }

  1. --- Колонки (лише приклади) ---

columns:

- name: protocol_num

label: "Номер протоколу"

edittype: text

editrules: { required: true }

editoptions:

size: 28

maxlength: 50

formoptions:

rowpos: 1

colpos: 1

- name: protocol_date

label: "Дата протоколу"

edittype: text # або date, якщо ініціалізуєш календар через dataInit

editrules: { required: true, date: true }

editoptions:

size: 12

dataInit: "js:function(el){ $(el).datepicker({ dateFormat:'dd.mm.yy' }); }"

formoptions:

rowpos: 1

colpos: 2

- name: vologist

label: "Вологість"

edittype: text

editrules: { required: true, number: true, minValue: 0, maxValue: 100 }

editoptions:

size: 8

formoptions:

rowpos: 3

colpos: 1

elmsuffix: " %"

- name: masa1000

label: "Маса 1 тис. насінин"

edittype: text

editrules: { number: true, minValue: 0 }

editoptions:

size: 8

formoptions:

rowpos: 3

colpos: 2

elmsuffix: " г"

- name: insh_vidy

label: "Інші види (шт/кг)"

edittype: text

editrules: { integer: true, minValue: 0 }

editoptions:

size: 8

formoptions:

rowpos: 2

colpos: 1

elmsuffix: " шт/кг"

4) Часті питання / підводні камені

  • “rowpos/colpos стоять, але ширина інпута «не така»”
У стандартному редакторі інпут розтягує CSS теми. Контролюй ширину саме інпута через editoptions.size (text) або rows/cols (textarea). Для складніших кейсів — власний CSS клас через editoptions.class і стилізуй.
  • “Як перенести поле на всю ширину рядка?”
У стандартному редакторі немає офіційного colspan. Імітуй: постав colpos: 1, наступне поле — вже на наступному rowpos. Тобто дай цьому полю окремий рядок.
  • “Одиниці виміру праворуч від інпута?”
Використовуй formoptions.elmsuffix: " %" / " г" / " шт/кг".
  • “Як зробити календар/маску?”
Через editoptions.dataInit: "js:function(el){ /* ініціалізація */ }".