Конфігурація

На цій сторінці описано класи, які можна використовувати для створення конфігурації view віджета з настроюваними полями конфігурації. View конфігурації віджета — це частина віджета, яка дозволяє користувачеві налаштовувати параметри віджета для презентації.

Віджет

Основний клас віджетів, розширює базовий клас усіх віджетів інформаційної панелі - CWidget. Необхідний для заміни поведінки віджета за замовчуванням.

Клас Widget має бути розташований у кореневому каталозі віджета (наприклад, zabbix/ui/modules/my_custom_widget).

Приклад Widget.php

<?php
       
       namespace Modules\MyCustomWidget;
       
       use Zabbix\Core\CWidget;
       
       class Widget extends CWidget {
       
           public const MY_CONSTANT = 0;
       
          public function getTranslationStrings(): array {
               return [
                   'class.widget.js' => [
                     'No data' => _('No data')
                   ]
               ];
           }
       }

WidgetForm

Клас WidgetForm розширює стандартний клас CWidgetForm і містить набір полів CWidgetField. які необхідні для визначення структури зберігання конфігурації віджета в базі даних і обробки валідації вхідних даних.

Клас WidgetForm має бути розташований у каталозі includes. Якщо клас має іншу назву, її потрібно вказати в параметрі widget/form_class у файлі manifest.json.

includes/WidgetForm.php приклад

<?php
       
       namespace Modules\MyCustomWidget\Includes;
       
       use Modules\MyCustomWidget\Widget;
       
       use Zabbix\Widgets\{
           CWidgetField,
           CWidgetForm
       };
       
       use Zabbix\Widgets\Fields\{
           CWidgetFieldMultiSelectItem,
           CWidgetFieldTextBox,
           CWidgetFieldColor
       };
       
       class WidgetForm extends CWidgetForm {
       
           public function addFields(): self {
               return $this
                   ->addField(
                       (new CWidgetFieldMultiSelectItem('itemid', _('Item')))
                           ->setFlags(CWidgetField::FLAG_NOT_EMPTY | CWidgetField::FLAG_LABEL_ASTERISK)
                           ->setMultiple(false)
                           ->setFilterParameter('numeric', true)
                   )
                   ->addField(
                     new CWidgetFieldTextBox('description', _('Description'))
                   )
                   ->addField(
                     (new CWidgetFieldColor('chart_color', _('Color')))->setDefault('FF0000')
                   );
           }
       }

CWidgetFormView

Клас CWidgetFormView потрібен для визначення логіки представлення полів, визначених у класі WidgetForm, визначення їх зовнішнього вигляду та поведінки під час візуалізації у вікні конфігурації.

Клас CWidgetFormView підтримує такі методи:

  • addField() - отримує в якості параметра екземпляр класу CWidgetFieldView; кожен клас CWidgetField має відповідний клас CWidgetFieldView для використання в view конфігурації віджета.
  • includeJsFile() - дозволяє додати файл JavaScript до view конфігурації віджета.
  • addJavaScript() - дозволяє додати вбудований JavaScript, який буде виконано, щойно буде завантажено view конфігурації віджета.

Клас CWidgetFormView має бути розташований у каталозі views.

views/widget.edit.php приклад

<?php
           
       /**
        * My custom widget form view.
        *
        * @var CView $this 
       * @var array $data
        */
       
       use Zabbix\Widgets\Fields\CWidgetFieldGraphDataSet;
       
       (new CWidgetFormView($data))
           ->addField(
               new CWidgetFieldMultiSelectItemView($data['fields']['itemid'], $data['captions']['items']['itemid'])
           )
           ->addField(
               new CWidgetFieldTextBoxView($data['fields']['description']),
               'js-advanced-configuration'
           )
           ->addField(
               new CWidgetFieldColorView($data['fields']['chart_color']),
               'js-advanced-configuration'
           )
           ->includeJsFile('widget.edit.js.php')
           ->addJavaScript('my_widget_form.init('.json_encode([
               'color_palette' => CWidgetFieldGraphDataSet::DEFAULT_COLOR_PALETTE
           ], JSON_THROW_ON_ERROR).');')
           ->show();

JavaScript

Клас JavaScript можна використовувати для додавання динамічної поведінки та інтерактивності до view конфігурації віджета. Наприклад, ви можете ініціалізувати засіб вибору кольорів, визначений у класі CWidgetFormView.

Клас JavaScript має бути завантажений разом із формою, тому на нього слід посилатися в класі CWidgetFormView за допомогою методів includeJsFile() і addJavaScript().

У наведеному нижче прикладі екземпляр класу singleton одразу створюється та зберігається під назвою window.my_custom_widget_form. Таким чином, відкриття форми вдруге призведе до повторного створення екземпляра.

Клас JavaScript має бути розташований у каталозі views.

views/widget.edit.js.php приклад

<?php
       
       use Modules\LessonGaugeChart\Widget;
       
       ?>
       
       window.widget_lesson_gauge_chart_form = new class {
       
           init({color_palette}) {
               this._advanced_configuration = document.getElementById('adv_conf');
       
               this._advanced_configuration.addEventListener('change', () => this.updateForm());
       
               colorPalette.setThemeColors(color_palette);
       
               for (const colorpicker of jQuery('.<?= ZBX_STYLE_COLOR_PICKER ?> input')) {
                   jQuery(colorpicker).colorpicker();
               }
       
               const overlay = overlays_stack.getById('widget_properties');
       
               for (const event of ['overlay.reload', 'overlay.close']) {
                   overlay.$dialogue[0].addEventListener(event, () => { jQuery.colorpicker('hide'); });
               }
       
               this.updateForm();
           }
       
           updateForm() {
               const show_advanced_configuration = this._advanced_configuration.checked;
       
               for (const element of this._form.querySelectorAll('.js-advanced-configuration')) {
                 element.style.display = show_advanced_configuration ? '' : 'none';
               }
           }
       };

CWidgetField

Клас CWidgetField є базовим класом, від якого успадковуються всі класи полів форми (CWidgetFieldCheckBox, CWidgetFieldTextArea, CWidgetFieldRadioButtonList тощо). Класи, що розширюють CWidgetField, відповідають за отримання, збереження та перевірку значень конфігурації віджетів.

Доступні такі класи CWidgetField.

Клас CWidgetField Тип поля бази даних Опис
CWidgetFieldCheckBox int32 Один чекбокс.
CWidgetFieldCheckBoxList масив int32 Кілька чекбоксів під одним полем конфігурації.
CWidgetFieldColor string Поле вибору кольору.
CWidgetFieldDatePicker string Поле вибору дати.
CWidgetFieldHostPatternSelect string Множинне поле для вибору, яке дозволяє вибрати один або кілька хостів. Підтримує визначення шаблонів імен хостів (усі відповідні хости будуть вибрані).
CWidgetFieldIntegerBox int32 Поле для введення цілого числа. Можна використовувати для налаштування мінімальних і максимальних значень.
CWidgetFieldLatLng string Текстове поле, яке дозволяє вводити через кому широту, довготу та рівень масштабування карти.
CWidgetFieldMultiSelectAction ID Поле множинного вибору для вибору дій (зі списку дій, визначених у Сповіщення → Дії).
CWidgetFieldMultiSelectGraph ID Множинне поле для вибору власних графіків.
CWidgetFieldMultiSelectGraphPrototype ID Поле для вибору користувацьких прототипів графів.
CWidgetFieldMultiSelectGroup ID Множинне поле для вибору груп хостів.
CWidgetFieldMultiSelectHost ID Поле множинного вибору для вибору хостів.
CWidgetFieldMultiSelectItem ID Множинне поле для вибору елементів даних.
CWidgetFieldMultiSelectItemPrototype ID Множинне поле для вибору прототипів елементів даних.
CWidgetFieldMultiSelectMediaType ID Множинне поле для вибору типів медіа.
CWidgetFieldMultiSelectService ID Множинне поле для вибору служб.
CWidgetFieldMultiSelectSla ID Множинне поле для вибору SLA.
CWidgetFieldMultiSelectUser ID Множинне поле для вибору користувачів.
CWidgetFieldNumericBox string Поле для введення числа з плаваючою точкою.
CWidgetFieldRadioButtonList int32 Група radiobox-ів, яка складається з одного або кількох radiobox-ів.
CWidgetFieldRangeControl int32 Повзунок для вибору значення цілочисельного типу.
CWidgetFieldSelect int32 Випадаюче вікно вибору.
CWidgetFieldSeverities масив int32 CWidgetFieldCheckBoxList попередньо налаштованих із рівнями серйозності тригера.
CWidgetFieldTags array (string, int32, string) Дозволяє налаштувати один або кілька рядків фільтра тегів.
CWidgetFieldTextArea string Текстова область для введення багаторядкового тексту.
CWidgetFieldTextBox string Текстове поле для введення однорядкового тексту.
CWidgetFieldTimeZone string Випадаюче меню з часовими поясами.
CWidgetFieldUrl string Текстове поле, яке дозволяє вводити URL-адреси.

Наступні класи CWidgetField були створені для окремих віджетів. Ці класи мають дуже специфічні випадки використання, але їх також можна використовувати повторно, якщо це необхідно.

Клас CWidgetField Тип поля бази даних Опис
CWidgetFieldColumnsList масив (кілька змішаних) Для віджета Top hosts. Створює таблицю з настроюваними стовпцями дозволених типів.
CWidgetFieldGraphDataSet масив (кілька змішаних) Для віджета Graph. Налаштувує конфігурацію набору даних і всі пов’язані параметри.
CWidgetFieldGraphOverride масив (кілька змішаних) Для віджета Graph. Перевизначення налаштувань для певних хостів/елементів. Будь-яку конфігурацію набору даних можна змінити.
CWidgetFieldNavTree string Для віджета Map navigation tree. Замінює вигляд віджету в режимі редагування на дерево вибору мапи.
CWidgetFieldReference string Для віджета Map navigation tree. Створює унікальний ідентифікатор для цього віджета на інформаційній панелі. Він використовується для посилання на цей віджет з інших віджетів.
CWidgetFieldSelectResource ID Для віджета Map. Дозволяє вибрати карту мережі Zabbix.
CWidgetFieldThresholds масив (string, string) Для віджета Top hosts. Дозволяє налаштувати пари кольорів і чисел.
CWidgetFieldWidgetSelect string Для віджета Map. Дозволяє вибрати дерево навігації карти з поточної інформаційної панелі. Потрібно використовувати разом із CWidgetFieldReference у віджеті Навігаційне дерево карти.