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.