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

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

Виджет

Основной класс виджетов, расширяет базовый класс всех виджетов информационной панели - 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 для использования в представлении конфигурации виджета.
  • includeJsFile() — позволяет добавить файл JavaScript в представление конфигурации виджета.
  • addJavaScript() — позволяет добавить встроенный JavaScript, который будет выполнен сразу после загрузки представления конфигурации виджета.

Класс 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 можно использовать для добавления динамического поведения и интерактивности в представление конфигурации виджета. Например, вы можете инициализировать палитру цветов, определенную в классе CWidgetFormView.

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

В приведенном ниже примере экземпляр одноэлементного класса сразу создается и сохраняется под именем 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 строка Поле выбора даты.
CWidgetFieldHostPatternSelect строка Поле множественного выбора, которое позволяет выбрать одного или нескольких узлов сети. Поддерживает определение шаблонов имен узлов сети (будут выбраны все соответствующие узлы сети).
CWidgetFieldIntegerBox int32 Поле для ввода целого числа. Можно использовать для настройки минимальных и максимальных значений.
CWidgetFieldLatLng строка Поле для ввода широты, долготы и уровня увеличения карты через запятую.
CWidgetFieldMultiSelectAction ID Поле множественного выбора для выбора действий (из списка действий, определенных в разделе Alerts → Actions).
CWidgetFieldMultiSelectGraph ID Поле множественного выбора для выбора пользовательских графиков.
CWidgetFieldMultiSelectGraphPrototype ID Поле множественного выбора для выбора пользовательских прототипов графиков.
CWidgetFieldMultiSelectGroup ID Поле множественного выбора для выбора групп узлов сети.
CWidgetFieldMultiSelectHost ID Поле множественного выбора для выбора узлов сети.
CWidgetFieldMultiSelectItem ID Поле множественного выбора для выбора элементов данных.
CWidgetFieldMultiSelectItemPrototype ID Поле множественного выбора для выбора прототипов элементов данных.
CWidgetFieldMultiSelectMediaType ID Поле множественного выбора для выбора типов способов оповещения.
CWidgetFieldMultiSelectService ID Поле множественного выбора для выбора сервисов.
CWidgetFieldMultiSelectSla ID Поле множественного выбора для выбора соглашений об уровне обслуживания (SLA).
CWidgetFieldMultiSelectUser ID Поле множественного выбора для выбора пользователей.
CWidgetFieldNumericBox строка Поле для ввода числа с плавающей запятой.
CWidgetFieldRadioButtonList int32 Группа переключателей, состоящая из одного или нескольких радиокнопок.
CWidgetFieldRangeControl int32 Ползунок для выбора значения целочисленного типа.
CWidgetFieldSelect int32 Поле выбора раскрывающегося списка.
CWidgetFieldSeverities массив int32 CWidgetFieldCheckBoxList с заданными уровнями важности триггеров.
CWidgetFieldTags массив (строка, int32, строка) Позволяет настроить одну или несколько строк фильтра тегов.
CWidgetFieldTextArea строка Текстовая область для ввода многострочного текста.
CWidgetFieldTextBox строка Текстовое поле для ввода однострочного текста.
CWidgetFieldTimeZone строка Раскрывающийся список с часовыми поясами.
CWidgetFieldUrl строка Текстовое поле, позволяющее вводить URL-адреса.

Следующие классы CWidgetField были созданы для определенных виджетов. Эти классы имеют очень специфические случаи использования, но их также можно использовать повторно, если это необходимо.

Класс CWidgetField Тип поля в базе данных Описание
CWidgetFieldColumnsList массив (multiple mixed) Для виджета Топ узлов сети. Создайте таблицу с настраиваемыми столбцами разрешенных типов.
CWidgetFieldGraphDataSet массив (multiple mixed) Для виджета График. Настройка конфигурации набора данных и всех связанных с ней опций.
CWidgetFieldGraphOverride массив (multiple mixed) Для виджета График. Переопределения настройки для конкретных узлов сети/элементов данных. Любую конфигурацию набора данных можно переопределить.
CWidgetFieldNavTree строка Для виджета Дерево навигации по карте. Заменяет вид виджета в режиме редактирования на дерево выбора карты.
CWidgetFieldReference строка Для виджета Дерево навигации по карте. Создает уникальный идентификатор для этого виджета на панели. Он используется для ссылки на этот виджет из других виджетов.
CWidgetFieldSelectResource ID Для виджета Карта. Позволяет выбрать карту сети Zabbix.
CWidgetFieldThresholds массив (строка, строка) Для виджета Топ узлов сети. Позволяет настроить цвет и числовые пары.
CWidgetFieldWidgetSelect строка Для виджета Карта. Позволяет выбрать дерево навигации карты из текущей панели. Должен использоваться в сочетании с CWidgetFieldReference в виджете Дерево навигации по карте.