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