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

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

Виджет

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

Класс CWidgetFormView должен находиться в каталоге views.

Пример views/widget.edit.php

<?php

/**
 * My custom widget form view.
 *
 * @var CView $this
 * @var array $data
 */

use Modules\MyCustomWidget\Includes\WidgetForm;

(new CWidgetFormView($data))
    ->addField(
        (new CWidgetFieldMultiSelectItemView($data['fields']['itemid']))->setPopupParameter('numeric', true)
    )
    ->addFieldset(
        (new CWidgetFormFieldsetCollapsibleView(_('Advanced configuration')))
            ->addField(
                new CWidgetFieldTextBoxView($data['fields']['description'])
            )
            ->addField(
                new CWidgetFieldColorView($data['fields']['chart_color'])
            )
    )
    ->includeJsFile('widget.edit.js.php')
    ->addJavaScript('my_custom_widget_form.init('.json_encode([
        'color_palette' => WidgetForm::DEFAULT_COLOR_PALETTE
    ]).');')
    ->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 array of int32 Несколько флажков в одном поле конфигурации.
CWidgetFieldColor string Поле выбора цвета.
CWidgetFieldDatePicker string Поле выбора даты.
CWidgetFieldIntegerBox int32 Поле для ввода целого числа. Можно настроить минимальное и максимальное значения.
CWidgetFieldLatLng string Текстовое поле для ввода разделённых запятыми широты, долготы и уровня масштабирования карты.
CWidgetFieldMultiSelect - Базовый класс для полей множественного выбора, расширяемый всеми классами CWidgetFieldMultiSelect*.
CWidgetFieldMultiSelectAction ID Поле множественного выбора действий из списка действий, определённых в разделе Оповещения > Действия.
CWidgetFieldMultiSelectGraph ID Поле множественного выбора пользовательских графиков.
CWidgetFieldMultiSelectGraphPrototype ID Поле множественного выбора прототипов пользовательских графиков.
CWidgetFieldMultiSelectGroup ID Поле множественного выбора групп узлов сети.
CWidgetFieldMultiSelectHost ID Поле множественного выбора узлов сети.
CWidgetFieldMultiSelectHostInventory array of int32 Поле множественного выбора полей инвентаризации узлов сети.
CWidgetFieldMultiSelectItem ID Поле множественного выбора элементов данных.
CWidgetFieldMultiSelectItemPrototype ID Поле множественного выбора прототипов элементов данных.
CWidgetFieldMultiSelectMap ID Поле множественного выбора карт.
CWidgetFieldMultiSelectMediaType ID Поле множественного выбора типов носителей.
CWidgetFieldMultiSelectOverrideHost ID Поле множественного выбора источника данных для узлов сети из панели мониторинга или другого виджета.
CWidgetFieldMultiSelectService ID Поле множественного выбора сервисов.
CWidgetFieldMultiSelectSla ID Поле множественного выбора SLA.
CWidgetFieldMultiSelectUser ID Поле множественного выбора пользователей.
CWidgetFieldNavTree array of (multiple mixed) Хранит структуру дерева навигации карт для использования в виджете Дерево навигации карт.
CWidgetFieldNumericBox string Поле для ввода числа с плавающей запятой.
CWidgetFieldPatternSelect - Базовый класс для полей выбора по шаблону, расширяемый всеми классами CWidgetPatternSelect*.
CWidgetFieldPatternSelectHost string Поле множественного выбора узлов сети. Поддерживает шаблоны имён узлов сети.
CWidgetFieldPatternSelectItem string Поле множественного выбора элементов данных. Поддерживает шаблоны имён элементов данных.
CWidgetFieldRadioButtonList int32 Группа переключателей, состоящая из одного или нескольких переключателей.
CWidgetFieldRangeControl int32 Ползунок для выбора значения целочисленного типа.
CWidgetFieldReference string Хранит уникальный идентификатор этого виджета на панели мониторинга; используется для взаимодействия между виджетами.
CWidgetFieldSelect int32 Раскрывающийся список.
CWidgetFieldSeverities array of int32 Предварительно настроенный CWidgetFieldCheckBoxList с уровнями важности триггеров.
CWidgetFieldSparkline array of (multiple mixed) Позволяет настроить график-спарклайн.
CWidgetFieldTags array of (string, int32, string) Позволяет настроить одну или несколько строк фильтра тегов.
CWidgetFieldTextArea string Текстовая область для ввода многострочного текста.
CWidgetFieldTextBox string Текстовое поле для ввода однострочного текста.
CWidgetFieldThresholds array of (string, string) Позволяет настроить пары цветов и чисел.
CWidgetFieldTimePeriod array of string Поле выбора периода времени.
CWidgetFieldTimeZone string Раскрывающийся список с часовыми поясами.
CWidgetFieldUrl string Текстовое поле для ввода URL-адресов.

Максимальная длина полей int32 составляет 10 символов, полей ID — 20 символов, а полей string — 65535 символов. Для составных типов (например, array of (string, int32, string)) ограничение применяется к каждому элементу отдельно. Ограничения длины для отдельных полей можно задать с помощью таких методов, как setMaxLength().