На этой странице описаны классы, которые можно использовать для создания представления конфигурации виджета с настраиваемыми полями конфигурации. Представление конфигурации виджета - это часть виджета, которая позволяет пользователю настраивать параметры виджета для презентации.
Основной класс виджетов, расширяет базовый класс всех виджетов информационной панели - 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 расширяет класс по умолчанию 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 необходим для определения логики представления полей, определенных в классе WidgetForm, а также для задания их внешнего вида и поведения при отображении в представлении конфигурации.
Класс CWidgetFormView поддерживает следующие методы:
Класс 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 можно использовать для добавления динамического поведения и интерактивности в представление конфигурации виджета. Например, вы можете инициализировать палитру цветов, определенную в классе 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 — это базовый класс, от которого наследуются все классы полей формы (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 в виджете Дерево навигации по карте. |