Konfiguracja
Konfiguracja widżetu jest częścią modułu widżetu, która pozwala użytkownikowi definiować ustawienia widżetu dla prezentacja. Ta strona opisuje klasy, które mogą być użyte do stworzenia formularza konfiguracji widżetu z niestandardowymi polami.
Widżet
Główna klasa widżetu, rozszerzająca bazową klasę wszystkich widżetów pulpitu - CWidget. Wymagana do nadpisania domyślnego zachowania widżetu.
Klasa Widget powinna znajdować się w katalogu głównym widżetu (na przykład, zabbix/ui/modules/my_custom_widget).
Przykład 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
Klasa WidgetForm rozszerza domyślną klasę CWidgetForm i zawiera zestaw pól CWidgetField, które są wymagane do zdefiniowania struktury przechowywania konfiguracji widgetu w bazie danych oraz obsługi walidacji danych wejściowych.
Klasa WidgetForm powinna znajdować się w katalogu includes. Jeśli klasa ma inną nazwę, należy ją określić w parametrze widget/form_class w pliku manifest.json.
Przykład pliku 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 const DEFAULT_COLOR_PALETTE = [
'FF465C', 'B0AF07', '0EC9AC', '524BBC', 'ED1248', 'D1E754', '2AB5FF', '385CC7', 'EC1594', 'BAE37D',
'6AC8FF', 'EE2B29', '3CA20D', '6F4BBC', '00A1FF', 'F3601B', '1CAE59', '45CFDB', '894BBC', '6D6D6D'
];
public function addFields(): self {
return $this
->addField(
(new CWidgetFieldMultiSelectItem('itemid', _('Item')))
->setFlags(CWidgetField::FLAG_NOT_EMPTY | CWidgetField::FLAG_LABEL_ASTERISK)
->setMultiple(false)
)
->addField(
new CWidgetFieldTextBox('description', _('Description'))
)
->addField(
(new CWidgetFieldColor('chart_color', _('Color')))->setDefault('FF0000')
);
}
}
CWidgetFormView
Klasa CWidgetFormView jest wymagana do określenia logiki prezentacji pól zdefiniowanych w klasie WidgetForm, określając ich wygląd i zachowanie podczas renderowania w widoku konfiguracji.
Klasa CWidgetFormView obsługuje następujące metody:
- addField() - przyjmuje jako parametr instancję klasy CWidgetFieldView; każda klasa CWidgetField ma odpowiadającą jej klasę CWidgetFieldView do użycia w widoku konfiguracji widgetu.
- addFieldset() - przyjmuje instancję klasy CWidgetFieldsGroupView, która łączy pola w zwijany kontener.
- addFieldsGroup() - przyjmuje instancję CWidgetFormFieldsetCollapsibleView, która wizualnie (za pomocą obramowania) łączy pola w grupę.
- includeJsFile() - umożliwia dodanie pliku JavaScript do widoku konfiguracji widgetu.
- addJavaScript() - umożliwia dodanie osadzonego kodu JavaScript, który zostanie wykonany natychmiast po załadowaniu widoku konfiguracji widgetu.
Klasa CWidgetFormView powinna znajdować się w katalogu views.
Przykład views/widget.edit.php
<?php
/**
* Widok formularza mojego niestandardowego widgetu.
*
* @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(_('Konfiguracja zaawansowana')))
->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
Klasa JavaScript może być użyta do dodania dynamicznego zachowania i interaktywności do widoku konfiguracji widżetu. Na przykład, można zainicjować selektor kolorów, zdefiniowany w klasie CWidgetFormView.
Klasa JavaScript powinna zostać załadowana wraz z formularzem, dlatego należy odwołać się do niej w klasie CWidgetFormView za pomocą metod includeJsFile() i addJavaScript().
W poniższym przykładzie instancja klasy singleton jest natychmiast tworzona i przechowywana pod nazwą window.my_custom_widget_form. W ten sposób otwarcie formularza po raz drugi spowoduje ponowne utworzenie instancji.
Klasa JavaScript powinna znajdować się w katalogu views.
views/widget.edit.js.php example
<?php
use Modules\MyCustomWidget\Widget;
?>
window.my_custom_widget_form = new class {
init({color_palette}) {
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'); });
}
}
};
CWidgetField
Klasa CWidgetField jest klasą bazową, po której dziedziczą wszystkie klasy pól formularza (CWidgetFieldCheckBox, CWidgetFieldTextArea, CWidgetFieldRadioButtonList itd.). Klasy rozszerzające CWidgetField odpowiadają za odbieranie, zapisywanie i walidację wartości konfiguracji widżetu.
Dostępne są następujące klasy CWidgetField.
| CWidgetField class | Database field type | Description |
|---|---|---|
| CWidgetFieldCheckBox | int32 | Pojedyncze pole wyboru. |
| CWidgetFieldCheckBoxList | array of int32 | Wiele pól wyboru w ramach jednego pola konfiguracyjnego. |
| CWidgetFieldColor | string | Pole wyboru koloru. |
| CWidgetFieldDatePicker | string | Pole wyboru daty. |
| CWidgetFieldHostPatternSelect | string | Pole wielokrotnego wyboru umożliwiające wybranie jednego lub wielu hostów. Obsługuje definiowanie wzorców nazw hostów (zostaną wybrane wszystkie pasujące hosty). |
| CWidgetFieldIntegerBox | int32 | Pole do wprowadzania liczby całkowitej. Może być używane do konfiguracji wartości minimalnych i maksymalnych. |
| CWidgetFieldLatLng | string | Pole tekstowe umożliwiające wprowadzenie szerokości geograficznej, długości geograficznej i poziomu powiększenia mapy, oddzielonych przecinkami. |
| CWidgetFieldMultiSelectAction | ID | Pole wielokrotnego wyboru do wybierania akcji (z listy akcji zdefiniowanych w Alerts → Actions). |
| CWidgetFieldMultiSelectGraph | ID | Pole wielokrotnego wyboru do wybierania wykresów niestandardowych. |
| CWidgetFieldMultiSelectGraphPrototype | ID | Pole wielokrotnego wyboru do wybierania prototypów wykresów niestandardowych. |
| CWidgetFieldMultiSelectGroup | ID | Pole wielokrotnego wyboru do wybierania grup hostów. |
| CWidgetFieldMultiSelectHost | ID | Pole wielokrotnego wyboru do wybierania hostów. |
| CWidgetFieldMultiSelectItem | ID | Pole wielokrotnego wyboru do wybierania pozycji. |
| CWidgetFieldMultiSelectItemPattern | ID | Pole wielokrotnego wyboru do wybierania wzorców pozycji. |
| CWidgetFieldMultiSelectItemPrototype | ID | Pole wielokrotnego wyboru do wybierania prototypów pozycji. |
| CWidgetFieldMultiSelectMap | ID | Pole wielokrotnego wyboru do wybierania map. |
| CWidgetFieldMultiSelectMediaType | ID | Pole wielokrotnego wyboru do wybierania typów mediów. |
| CWidgetFieldMultiSelectOverrideHost | ID | Pole wielokrotnego wyboru do wybierania źródła danych (pulpitu lub innego widżetu) zawierającego host, dla którego widżet może wyświetlać dane. |
| CWidgetFieldMultiSelectService | ID | Pole wielokrotnego wyboru do wybierania usług. |
| CWidgetFieldMultiSelectSla | ID | Pole wielokrotnego wyboru do wybierania SLA. |
| CWidgetFieldMultiSelectUser | ID | Pole wielokrotnego wyboru do wybierania użytkowników. |
| CWidgetFieldNumericBox | string | Pole do wprowadzania liczby zmiennoprzecinkowej. |
| CWidgetFieldRadioButtonList | int32 | Grupa przycisków opcji składająca się z jednego lub większej liczby przycisków opcji. |
| CWidgetFieldRangeControl | int32 | Suwak do wybierania wartości typu całkowitego. |
| CWidgetFieldReference | string | Tworzy unikalny identyfikator tego widżetu na pulpicie. Jest używany do odwoływania się do tego widżetu z innych widżetów. |
| CWidgetFieldSelect | int32 | Rozwijane pole wyboru. |
| CWidgetFieldSeverities | array of int32 | CWidgetFieldCheckBoxList z predefiniowanymi poziomami ważności wyzwalaczy. |
| CWidgetFieldTags | array of (string, int32, string) | Umożliwia skonfigurowanie jednego lub wielu wierszy filtra tagów. |
| CWidgetFieldTextArea | string | Obszar tekstowy do wprowadzania tekstu wielowierszowego. |
| CWidgetFieldTextBox | string | Pole tekstowe do wprowadzania tekstu jednowierszowego. |
| CWidgetFieldTimePeriod | array of string | Pole wyboru okresu czasu. |
| CWidgetFieldTimeZone | string | Lista rozwijana ze strefami czasowymi. |
| CWidgetFieldThresholds | array of (string, string) | Umożliwia skonfigurowanie par kolorów i liczb. |
| CWidgetFieldUrl | string | Pole tekstowe umożliwiające wprowadzanie adresów URL. |
Następujące klasy CWidgetField zostały utworzone dla konkretnych widżetów. Klasy te mają bardzo specyficzne zastosowania, ale w razie potrzeby mogą być również używane ponownie.
| CWidgetField class | Database field type | Description |
|---|---|---|
| CWidgetFieldColumnsList | array of (multiple mixed) | Dla widżetu Top hosts. Tworzy tabelę z niestandardowymi kolumnami dozwolonych typów. |
| CWidgetFieldNavTree | string | Dla widżetu Map navigation tree. Zastępuje widok widżetu w trybie edycji drzewem wyboru map. |