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 validazione dei valori di configurazione del 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 singolo campo di configurazione. |
| CWidgetFieldColor | string | Campo di selezione del colore. |
| CWidgetFieldDatePicker | string | Campo di selezione della data. |
| CWidgetFieldHostPatternSelect | string | Campo di selezione multipla che consente di selezionare uno o più host. Supporta la definizione di modelli di nome host (verranno selezionati tutti gli host corrispondenti). |
| CWidgetFieldIntegerBox | int32 | Campo per inserire un numero intero. Può essere usato 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. |
| 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. |
| CWidgetFieldMultiSelectItem | ID | Campo di selezione multipla per selezionare item. |
| CWidgetFieldMultiSelectItemPattern | ID | Campo di selezione multipla per selezionare modelli di 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 sorgente dati (dashboard o altro widget) contenente un host per il quale il widget può visualizzare dati. |
| 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. |
| CWidgetFieldNumericBox | string | Campo per inserire un numero in virgola mobile. |
| CWidgetFieldRadioButtonList | int32 | Gruppo di pulsanti di opzione composto da uno o più pulsanti di opzione. |
| CWidgetFieldRangeControl | int32 | Cursore per selezionare un valore di tipo intero. |
| CWidgetFieldReference | string | Crea un identificatore univoco per questo widget nella dashboard. Viene utilizzato per fare riferimento a questo widget da altri widget. |
| CWidgetFieldSelect | int32 | Casella di selezione a discesa. |
| CWidgetFieldSeverities | array of int32 | CWidgetFieldCheckBoxList preimpostato con le severity dei trigger. |
| 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. |
| CWidgetFieldTimePeriod | array of string | Campo di selezione dell'intervallo di tempo. |
| CWidgetFieldTimeZone | string | Menu a discesa con i fusi orari. |
| CWidgetFieldThresholds | array of (string, string) | Consente di configurare coppie colore-numero. |
| CWidgetFieldUrl | string | Casella di testo che consente di inserire URL. |
Le seguenti classi CWidgetField sono state create per widget specifici. Queste classi hanno casi d'uso molto specifici, ma possono anche essere riutilizzate se necessario.
| Classe CWidgetField | Tipo di campo del database | Descrizione |
|---|---|---|
| CWidgetFieldColumnsList | array of (multiple mixed) | Per il widget Top hosts. Crea una tabella con colonne personalizzate dei tipi consentiti. |
| CWidgetFieldNavTree | string | Per il widget Map navigation tree. Sostituisce la vista del widget in modalità di modifica con l'albero di selezione della mappa. |