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