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.
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.
CWidgetFieldMultiSelect - Klasa bazowa dla pól wielokrotnego wyboru, rozszerzana przez wszystkie klasy CWidgetFieldMultiSelect*.
CWidgetFieldMultiSelectAction ID Pole wielokrotnego wyboru do wybierania akcji z listy akcji zdefiniowanych w Alerty → Akcje.
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.
CWidgetFieldMultiSelectHostInventory array of int32 Pole wielokrotnego wyboru do wybierania pól inwentarza hosta.
CWidgetFieldMultiSelectItem ID Pole wielokrotnego wyboru do wybierania 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 dla hostów z pulpitu lub innego widżetu.
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.
CWidgetFieldNavTree array of (multiple mixed) Przechowuje strukturę drzewa nawigacyjnego map do użycia w widżecie Drzewo nawigacyjne map.
CWidgetFieldNumericBox string Pole do wprowadzania liczby zmiennoprzecinkowej.
CWidgetFieldPatternSelect - Klasa bazowa dla pól wyboru wzorca, rozszerzana przez wszystkie klasy CWidgetPatternSelect*.
CWidgetFieldPatternSelectHost string Pole wielokrotnego wyboru do wybierania hostów. Obsługuje wzorce nazw hostów.
CWidgetFieldPatternSelectItem string Pole wielokrotnego wyboru do wybierania pozycji. Obsługuje wzorce nazw pozycji.
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 Przechowuje unikalny identyfikator tego widżetu na pulpicie; używany do komunikacji między widżetami.
CWidgetFieldSelect int32 Rozwijane pole wyboru.
CWidgetFieldSeverities array of int32 CWidgetFieldCheckBoxList z predefiniowanymi poziomami ważności wyzwalaczy.
CWidgetFieldSparkline array of (multiple mixed) Umożliwia konfigurację wykresu sparkline.
CWidgetFieldTags array of (string, int32, string) Umożliwia konfigurację jednego lub większej liczby wierszy filtra tagów.
CWidgetFieldTextArea string Obszar tekstowy do wprowadzania tekstu wielowierszowego.
CWidgetFieldTextBox string Pole tekstowe do wprowadzania tekstu jednowierszowego.
CWidgetFieldThresholds array of (string, string) Umożliwia konfigurację par kolor–liczba.
CWidgetFieldTimePeriod array of string Pole wyboru okresu czasu.
CWidgetFieldTimeZone string Lista rozwijana ze strefami czasowymi.
CWidgetFieldUrl string Pole tekstowe umożliwiające wprowadzanie adresów URL.

Maksymalna długość dla pól int32 wynosi 10 znaków, dla pól ID 20 znaków, a dla pól string 65535 znaków. W przypadku typów złożonych (np. array of (string, int32, string)) limit dotyczy każdego elementu osobno. Ograniczenia długości specyficzne dla danego pola można ustawić za pomocą metod takich jak setMaxLength().