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 di base da cui ereditano tutte le classi dei campi del modulo (CWidgetFieldCheckBox, CWidgetFieldTextArea, CWidgetFieldRadioButtonList, ecc.). Le classi che estendono CWidgetField sono responsabili della ricezione, del salvataggio e della convalida dei valori di configurazione dei widget.

Sono disponibili le seguenti classi CWidgetField.

Classe CWidgetField Tipo di campo del database Descrizione
CWidgetFieldCheckBox int32 Casella di controllo singola.
CWidgetFieldCheckBoxList array of int32 Più caselle di controllo in un unico campo di configurazione.
CWidgetFieldColor string Campo di selezione del colore.
CWidgetFieldDatePicker string Campo di selezione della data.
CWidgetFieldIntegerBox int32 Campo per l'inserimento di un numero intero. Può essere utilizzato per configurare valori minimi e massimi.
CWidgetFieldLatLng string Casella di testo che consente di inserire latitudine, longitudine e livello di zoom della mappa separati da virgole.
CWidgetFieldMultiSelect - Classe di base per i campi di selezione multipla, estesa da tutte le classi CWidgetFieldMultiSelect*.
CWidgetFieldMultiSelectAction ID Campo di selezione multipla per selezionare azioni dall'elenco delle azioni definite in Avvisi → Azioni.
CWidgetFieldMultiSelectGraph ID Campo di selezione multipla per selezionare grafici personalizzati.
CWidgetFieldMultiSelectGraphPrototype ID Campo di selezione multipla per selezionare prototipi di grafico personalizzati.
CWidgetFieldMultiSelectGroup ID Campo di selezione multipla per selezionare gruppi di host.
CWidgetFieldMultiSelectHost ID Campo di selezione multipla per selezionare host.
CWidgetFieldMultiSelectHostInventory array of int32 Campo di selezione multipla per selezionare campi dell'inventario host.
CWidgetFieldMultiSelectItem ID Campo di selezione multipla per selezionare item.
CWidgetFieldMultiSelectItemPrototype ID Campo di selezione multipla per selezionare prototipi di item.
CWidgetFieldMultiSelectMap ID Campo di selezione multipla per selezionare mappe.
CWidgetFieldMultiSelectMediaType ID Campo di selezione multipla per selezionare tipi di supporto.
CWidgetFieldMultiSelectOverrideHost ID Campo di selezione multipla per selezionare una origine dati per gli host da una dashboard o da un altro widget.
CWidgetFieldMultiSelectService ID Campo di selezione multipla per selezionare servizi.
CWidgetFieldMultiSelectSla ID Campo di selezione multipla per selezionare SLA.
CWidgetFieldMultiSelectUser ID Campo di selezione multipla per selezionare utenti.
CWidgetFieldNavTree array of (multiple mixed) Memorizza una struttura ad albero di navigazione delle mappe da utilizzare nel widget Map navigation tree.
CWidgetFieldNumericBox string Campo per l'inserimento di un numero in virgola mobile.
CWidgetFieldPatternSelect - Classe di base per i campi di selezione per pattern, estesa da tutte le classi CWidgetPatternSelect*.
CWidgetFieldPatternSelectHost string Campo di selezione multipla per selezionare host. Supporta pattern di nomi host.
CWidgetFieldPatternSelectItem string Campo di selezione multipla per selezionare item. Supporta pattern di nomi 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; utilizzato per la comunicazione tra widget.
CWidgetFieldSelect int32 Casella di selezione a discesa.
CWidgetFieldSeverities array of int32 CWidgetFieldCheckBoxList preimpostato 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 dei tag.
CWidgetFieldTextArea string Area di testo per l'inserimento di testo su più righe.
CWidgetFieldTextBox string Casella di testo per l'inserimento 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 dell'intervallo di tempo.
CWidgetFieldTimeZone string Menu a discesa con i fusi orari.
CWidgetFieldUrl string Casella di testo che consente di inserire URL.

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