Configurazione

Questa pagina descrive le classi che possono essere utilizzate per creare una vista di configurazione del widget con campi di configurazione personalizzati. La vista di configurazione del widget è la parte del widget che consente all'utente di configurare i parametri del widget per la presentazione.

Widget

La classe widget primaria, estende la classe base di tutti i widget della dashboard - CWidget. Necessaria per sovrascrivere il comportamento predefinito del widget.

La classe Widget deve trovarsi nella directory principale del widget (ad esempio, zabbix/ui/modules/my_custom_widget).

Esempio di 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

La classe WidgetForm estende la classe predefinita CWidgetForm e contiene un insieme di campi CWidgetField necessari per definire la struttura di archiviazione della configurazione del widget nel database e gestire la validazione dell'input.

La classe WidgetForm deve trovarsi nella directory includes. Se la classe ha un nome diverso, il nome deve essere specificato nel parametro widget/form_class nel file manifest.json.

Esempio di 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

La classe CWidgetFormView è necessaria per specificare la logica di presentazione dei campi definiti nella classe WidgetForm, determinandone l'aspetto e il comportamento quando vengono renderizzati nella vista di configurazione.

La classe CWidgetFormView supporta i seguenti metodi:

  • addField() - riceve come parametro un'istanza della classe CWidgetFieldView; ogni classe CWidgetField ha una rispettiva classe CWidgetFieldView da utilizzare nella vista di configurazione del widget.
  • addFieldset() - riceve un'istanza della classe CWidgetFieldsGroupView che combina i campi in un contenitore comprimibile.
  • addFieldsGroup() - riceve un'istanza di CWidgetFormFieldsetCollapsibleView che combina visivamente (con un bordo) i campi in un gruppo.
  • includeJsFile() - consente di aggiungere un file JavaScript alla vista di configurazione del widget.
  • addJavaScript() - consente di aggiungere codice JavaScript inline che verrà eseguito non appena la vista di configurazione del widget viene caricata.

La classe CWidgetFormView deve trovarsi nella directory views.

Esempio views/widget.edit.php

<?php

/**
 * My custom widget form view.
 *
 * @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

Una classe JavaScript può essere utilizzata per aggiungere comportamento dinamico e interattività alla vista di configurazione del widget. Ad esempio, è possibile inizializzare un selettore di colori, definito nella classe CWidgetFormView.

La classe JavaScript deve essere caricata insieme al modulo, pertanto deve essere referenziata nella classe CWidgetFormView utilizzando i metodi includeJsFile() e addJavaScript().

Nell'esempio seguente, un'istanza singleton della classe viene creata immediatamente e memorizzata con il nome window.my_custom_widget_form. Pertanto, aprendo il modulo una seconda volta, l'istanza verrà ricreata.

La classe JavaScript deve trovarsi nella directory views.

Esempio di views/widget.edit.js.php

<?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

La classe CWidgetField è una classe base da cui ereditano tutte le classi dei campi dei moduli (CWidgetFieldCheckBox, CWidgetFieldTextArea, CWidgetFieldRadioButtonList, ecc.). Le classi che estendono CWidgetField sono responsabili della ricezione, del salvataggio e della validazione dei valori di configurazione del widget.

Sono disponibili le seguenti classi CWidgetField.

Classe CWidgetField Tipo di campo del database Descrizione
CWidgetFieldCheckBox int32 Singola casella di controllo.
CWidgetFieldCheckBoxList array of int32 Più caselle di controllo sotto un unico campo di configurazione.
CWidgetFieldColor string Campo di selezione del colore.
CWidgetFieldDatePicker string Campo di selezione della data.
CWidgetFieldIntegerBox int32 Campo per l'immissione di un numero intero. Può essere usato per configurare i valori minimo e massimo.
CWidgetFieldLatLng string Casella di testo che consente di immettere latitudine, longitudine e livello di zoom della mappa separati da virgole.
CWidgetFieldMultiSelect - Classe base per i campi multiselezione, estesa da tutte le classi CWidgetFieldMultiSelect*.
CWidgetFieldMultiSelectAction ID Campo multiselezione per selezionare azioni dall'elenco delle azioni definite in Alerts → Actions.
CWidgetFieldMultiSelectGraph ID Campo multiselezione per selezionare grafici personalizzati.
CWidgetFieldMultiSelectGraphPrototype ID Campo multiselezione per selezionare prototipi di grafici personalizzati.
CWidgetFieldMultiSelectGroup ID Campo multiselezione per selezionare gruppi di host.
CWidgetFieldMultiSelectHost ID Campo multiselezione per selezionare host.
CWidgetFieldMultiSelectHostInventory array of int32 Campo multiselezione per selezionare i campi dell'inventario host.
CWidgetFieldMultiSelectItem ID Campo multiselezione per selezionare item.
CWidgetFieldMultiSelectItemPrototype ID Campo multiselezione per selezionare prototipi di item.
CWidgetFieldMultiSelectMap ID Campo multiselezione per selezionare mappe.
CWidgetFieldMultiSelectMediaType ID Campo multiselezione per selezionare tipi di media.
CWidgetFieldMultiSelectOverrideHost ID Campo multiselezione per selezionare una sorgente dati per gli host da una dashboard o da un altro widget.
CWidgetFieldMultiSelectService ID Campo multiselezione per selezionare servizi.
CWidgetFieldMultiSelectSla ID Campo multiselezione per selezionare SLA.
CWidgetFieldMultiSelectUser ID Campo multiselezione per selezionare utenti.
CWidgetFieldNavTree array of (multiple mixed) Memorizza una struttura ad albero di navigazione delle mappe da usare nel widget Map navigation tree.
CWidgetFieldNumericBox string Campo per l'immissione di un numero in virgola mobile.
CWidgetFieldPatternSelect - Classe base per i campi di selezione tramite pattern, estesa da tutte le classi CWidgetPatternSelect*.
CWidgetFieldPatternSelectHost string Campo multiselezione per selezionare host. Supporta pattern per i nomi host.
CWidgetFieldPatternSelectItem string Campo multiselezione per selezionare item. Supporta pattern per i nomi degli item.
CWidgetFieldRadioButtonList int32 Gruppo di pulsanti di opzione costituito da uno o più pulsanti di opzione.
CWidgetFieldRangeControl int32 Cursore per selezionare un valore di tipo intero.
CWidgetFieldReference string Memorizza un identificatore univoco per questo widget nella dashboard; usato per la comunicazione tra widget.
CWidgetFieldSelect int32 Casella di selezione a discesa.
CWidgetFieldSeverities array of int32 CWidgetFieldCheckBoxList preconfigurato con le severità dei trigger.
CWidgetFieldSparkline array of (multiple mixed) Consente di configurare un grafico sparkline.
CWidgetFieldTags array of (string, int32, string) Consente di configurare una o più righe di filtro per tag.
CWidgetFieldTextArea string Area di testo per l'immissione di testo su più righe.
CWidgetFieldTextBox string Casella di testo per l'immissione di testo su una sola riga.
CWidgetFieldThresholds array of (string, string) Consente di configurare coppie di colore e numero.
CWidgetFieldTimePeriod array of string Campo di selezione del periodo di tempo.
CWidgetFieldTimeZone string Elenco a discesa con i fusi orari.
CWidgetFieldUrl string Casella di testo che consente di immettere URL.

La lunghezza massima per i campi int32 è di 10 caratteri, per i campi ID di 20 caratteri e per i campi string di 2048 caratteri. Per i tipi compositi (ad esempio, array of (string, int32, string)), il limite si applica a ciascun elemento singolarmente. Le restrizioni di lunghezza specifiche per campo possono essere impostate usando metodi come setMaxLength().