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