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ślania logiki prezentacji pól zdefiniowanych w klasie WidgetForm oraz ustalania ich wyglądu i zachowania 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 odpowiednią klasę CWidgetFieldView do użycia w widoku konfiguracji widgetu.
  • addFieldset() - przyjmuje instancję klasy CWidgetFieldsGroupView, która łączy pola w zwijany kontener.
  • addFieldsGroup() - przyjmuje instancję klasy 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 wbudowanego 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 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(_('Advanced configuration')))
            ->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 sprawdzanie poprawności wartości konfiguracji widżetu.

Dostępne są następujące klasy CWidgetField.

Klasa CWidgetField Typ pola w bazie danych Opis
CWidgetFieldCheckBox int32 Pojedyncze pole wyboru.
CWidgetFieldCheckBoxList array of int32 Wiele pól wyboru w ramach jednego pola konfiguracji.
CWidgetFieldColor string Pole wyboru koloru.
CWidgetFieldDatePicker string Pole wyboru daty.
CWidgetFieldIntegerBox int32 Pole do wprowadzania liczby całkowitej. Można go użyć do skonfigurowania wartości minimalnych i maksymalnych.
CWidgetFieldLatLng string Pole tekstowe do wprowadzania rozdzielonych przecinkami szerokości geograficznej, długości geograficznej i poziomu powiększenia mapy.
CWidgetFieldMultiSelect - Klasa bazowa pól wielokrotnego wyboru, rozszerzana przez wszystkie klasy CWidgetFieldMultiSelect*.
CWidgetFieldMultiSelectAction ID Pole wielokrotnego wyboru do wybierania działań z listy działań zdefiniowanych w sekcji 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.
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 dashboardu lub innego widżetu.
CWidgetFieldMultiSelectService ID Pole wielokrotnego wyboru do wybierania usług.
CWidgetFieldMultiSelectSla ID Pole wielokrotnego wyboru do wybierania umów 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 Map navigation tree.
CWidgetFieldNumericBox string Pole do wprowadzania liczby zmiennoprzecinkowej.
CWidgetFieldPatternSelect - Klasa bazowa 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 radiowych składająca się z co najmniej jednego przycisku radiowego.
CWidgetFieldRangeControl int32 Suwak do wybierania wartości typu całkowitego.
CWidgetFieldReference string Przechowuje unikatowy identyfikator tego widżetu na dashboardzie; służy do komunikacji między widżetami.
CWidgetFieldSelect int32 Rozwijane pole wyboru.
CWidgetFieldSeverities array of int32 CWidgetFieldCheckBoxList z ustawionymi poziomami ważności wyzwalaczy.
CWidgetFieldSparkline array of (multiple mixed) Umożliwia skonfigurowanie wykresu sparkline.
CWidgetFieldTags array of (string, int32, string) Umożliwia skonfigurowanie co najmniej jednego wiersza filtrów tagów.
CWidgetFieldTextArea string Pole tekstowe do wprowadzania tekstu wielowierszowego.
CWidgetFieldTextBox string Pole tekstowe do wprowadzania tekstu jednowierszowego.
CWidgetFieldThresholds array of (string, string) Umożliwia skonfigurowanie par kolorów i liczb.
CWidgetFieldTimePeriod array of string Pole wyboru okresu.
CWidgetFieldTimeZone string Rozwijana lista stref czasowych.
CWidgetFieldUrl string Pole tekstowe do wprowadzania adresów URL.

Maksymalna długość pól int32 wynosi 10 znaków, pól ID - 20 znaków, a pól string - 2048 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 właściwe dla danego pola można ustawić za pomocą metod takich jak setMaxLength().