Konfiguration
Auf dieser Seite werden Klassen beschrieben, die zum Erstellen einer Widget-Konfigurationsansicht mit benutzerdefinierten Konfigurationsfeldern verwendet werden können. Die Widget-Konfigurationsansicht ist der Teil des Widgets, der es dem Benutzer ermöglicht, Widget-Parameter für Präsentation zu konfigurieren.
Widget
Primäre Widget-Klasse, erweitert die Basisklasse aller Dashboard-Widgets - CWidget. Erforderlich, um das Standardverhalten des Widgets zu überschreiben.
Die Klasse Widget sollte sich im Stammverzeichnis des Widgets befinden (zum Beispiel, zabbix/ui/modules/my_custom_widget).
Widget.php Beispiel
<?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
Die Klasse WidgetForm erweitert die Standardklasse CWidgetForm und enthält einen Satz von CWidgetField Feldern welche für die Definition der Speicherstruktur der Widget-Konfiguration in der Datenbank und für die Eingabevalidierung erforderlich sind.
Die Klasse WidgetForm sollte sich im Verzeichnis includes befinden. Wenn die Klasse einen anderen Namen hat, sollte der Name im Parameter widget/form_class in der Datei manifest.json angegeben werden.
includes/WidgetForm.php Beispiel
<?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
Die Klasse CWidgetFormView wird benötigt, um die Darstellungslogik der in der Klasse WidgetForm definierten Felder festzulegen und ihr Aussehen und Verhalten bei der Darstellung in der Konfigurationsansicht zu bestimmen.
Die Klasse CWidgetFormView unterstützt die folgenden Methoden:
- addField() – erhält eine Instanz der Klasse CWidgetField als Parameter. Für jede Klasse CWidgetField gibt es eine entsprechende Klasse CWidgetFieldView, die in der Widget-Konfigurationsansicht verwendet wird.
- addFieldset() – erhält eine Instanz der Klasse CWidgetFieldsGroupView, die Felder in einem ausklappbaren Container zusammenfasst.
- addFieldsGroup() – erhält eine Instanz von CWidgetFormFieldsetCollapsibleView, die Felder visuell (mit einem Rahmen) zu einer Gruppe zusammenfasst.
- includeJsFile() – ermöglicht das Hinzufügen einer JavaScript-Datei zur Widget-Konfigurationsansicht.
- addJavaScript() – ermöglicht das Hinzufügen von Inline-JavaScript, das ausgeführt wird, sobald die Widget-Konfigurationsansicht geladen ist.
Die Klasse CWidgetFormView sollte sich im Verzeichnis views befinden.
Beispiel für 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
Eine JavaScript-Klasse kann verwendet werden, um der Widget-Konfigurationsansicht dynamisches Verhalten und Interaktivität hinzuzufügen. Sie können zum Beispiel einen Farbwähler initialisieren, der in der Klasse CWidgetFormView definiert ist.
Die JavaScript-Klasse sollte mit dem Formular geladen werden, daher sollte sie in der Klasse CWidgetFormView mit den Methoden includeJsFile() und addJavaScript() referenziert werden.
Im folgenden Beispiel wird sofort eine Singleton-Klasseninstanz erstellt und unter dem Namen window.my_custom_widget_form gespeichert. Wenn Sie also das Formular zum zweiten Mal öffnen, wird die Instanz neu erstellt.
Die JavaScript-Klasse sollte sich im Verzeichnis views befinden.
views/widget.edit.js.php Beispiel
<?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
Die Klasse CWidgetField ist eine Basisklasse, von der alle Formularfeldklassen (CWidgetFieldCheckBox, CWidgetFieldTextArea, CWidgetFieldRadioButtonList usw.) abgeleitet werden.
Von CWidgetField abgeleitete Klassen sind für das Empfangen, Speichern und Validieren von Konfigurationswerten eines Widgets verantwortlich.
Die folgenden CWidgetField-Klassen sind verfügbar.
| CWidgetField class | Database field type | Description |
|---|---|---|
| CWidgetFieldCheckBox | int32 | Einzelnes Kontrollkästchen. |
| CWidgetFieldCheckBoxList | array of int32 | Mehrere Kontrollkästchen unter einem einzelnen Konfigurationsfeld. |
| CWidgetFieldColor | string | Feld zur Farbauswahl. |
| CWidgetFieldDatePicker | string | Feld zur Auswahl eines Datums. |
| CWidgetFieldIntegerBox | int32 | Feld zur Eingabe einer Ganzzahl. Kann zur Konfiguration von Minimal- und Maximalwerten verwendet werden. |
| CWidgetFieldLatLng | string | Textfeld zur Eingabe von durch Kommas getrennten Angaben für Breitengrad, Längengrad und Kartenzoomstufe. |
| CWidgetFieldMultiSelect | - | Basisklasse für Mehrfachauswahlfelder, von der alle Klassen CWidgetFieldMultiSelect* abgeleitet werden. |
| CWidgetFieldMultiSelectAction | ID | Mehrfachauswahlfeld zur Auswahl von Aktionen aus der Liste der unter Alerts > Actions definierten Aktionen. |
| CWidgetFieldMultiSelectGraph | ID | Mehrfachauswahlfeld zur Auswahl benutzerdefinierter Graphen. |
| CWidgetFieldMultiSelectGraphPrototype | ID | Mehrfachauswahlfeld zur Auswahl benutzerdefinierter Graph-Prototypen. |
| CWidgetFieldMultiSelectGroup | ID | Mehrfachauswahlfeld zur Auswahl von Hostgruppen. |
| CWidgetFieldMultiSelectHost | ID | Mehrfachauswahlfeld zur Auswahl von Hosts. |
| CWidgetFieldMultiSelectHostInventory | array of int32 | Mehrfachauswahlfeld zur Auswahl von Hostinventarfeldern. |
| CWidgetFieldMultiSelectItem | ID | Mehrfachauswahlfeld zur Auswahl von Datenpunkten. |
| CWidgetFieldMultiSelectItemPrototype | ID | Mehrfachauswahlfeld zur Auswahl von Datenpunkt-Prototypen. |
| CWidgetFieldMultiSelectMap | ID | Mehrfachauswahlfeld zur Auswahl von Karten. |
| CWidgetFieldMultiSelectMediaType | ID | Mehrfachauswahlfeld zur Auswahl von Medientypen. |
| CWidgetFieldMultiSelectOverrideHost | ID | Mehrfachauswahlfeld zur Auswahl einer Datenquelle für Hosts aus einem Dashboard oder einem anderen Widget. |
| CWidgetFieldMultiSelectService | ID | Mehrfachauswahlfeld zur Auswahl von Services. |
| CWidgetFieldMultiSelectSla | ID | Mehrfachauswahlfeld zur Auswahl von SLAs. |
| CWidgetFieldMultiSelectUser | ID | Mehrfachauswahlfeld zur Auswahl von Benutzern. |
| CWidgetFieldNavTree | array of (multiple mixed) | Speichert eine Navigationsbaumstruktur von Karten zur Verwendung im Widget Map navigation tree. |
| CWidgetFieldNumericBox | string | Feld zur Eingabe einer Gleitkommazahl. |
| CWidgetFieldPatternSelect | - | Basisklasse für Musterauswahlfelder, von der alle Klassen CWidgetPatternSelect* abgeleitet werden. |
| CWidgetFieldPatternSelectHost | string | Mehrfachauswahlfeld zur Auswahl von Hosts. Unterstützt Hostnamenmuster. |
| CWidgetFieldPatternSelectItem | string | Mehrfachauswahlfeld zur Auswahl von Datenpunkten. Unterstützt Datenpunktnamensmuster. |
| CWidgetFieldRadioButtonList | int32 | Optionsfeldgruppe, die aus einem oder mehreren Optionsfeldern besteht. |
| CWidgetFieldRangeControl | int32 | Schieberegler zur Auswahl eines Werts vom Typ Ganzzahl. |
| CWidgetFieldReference | string | Speichert eine eindeutige Kennung für dieses Widget im Dashboard; wird für die Kommunikation zwischen Widgets verwendet. |
| CWidgetFieldSelect | int32 | Dropdown-Auswahlfeld. |
| CWidgetFieldSeverities | array of int32 | CWidgetFieldCheckBoxList, voreingestellt mit Auslöser-Schweregraden. |
| CWidgetFieldSparkline | array of (multiple mixed) | Ermöglicht die Konfiguration eines Sparkline-Diagramms. |
| CWidgetFieldTags | array of (string, int32, string) | Ermöglicht die Konfiguration einer oder mehrerer Zeilen für Tag-Filter. |
| CWidgetFieldTextArea | string | Textbereich zur Eingabe von mehrzeiligem Text. |
| CWidgetFieldTextBox | string | Textfeld zur Eingabe von einzeiligem Text. |
| CWidgetFieldThresholds | array of (string, string) | Ermöglicht die Konfiguration von Farb- und Zahlenpaaren. |
| CWidgetFieldTimePeriod | array of string | Feld zur Auswahl eines Zeitraums. |
| CWidgetFieldTimeZone | string | Dropdown-Liste mit Zeitzonen. |
| CWidgetFieldUrl | string | Textfeld zur Eingabe von URLs. |
Die maximale Länge für int32-Felder beträgt 10 Zeichen, für ID-Felder 20 Zeichen und für string-Felder 2048 Zeichen.
Bei zusammengesetzten Typen (z. B. array of (string, int32, string)) gilt die Begrenzung für jedes Element einzeln.
Feldspezifische Längenbeschränkungen können mithilfe von Methoden wie setMaxLength() festgelegt werden.