Configuración

Esta página describe las clases que se pueden usar para crear una vista de configuración de widgets con campos de configuración personalizados. La vista de configuración del widget es la parte del widget que permite al usuario configurar los parámetros del widget para presentation.

Widget

Clase de widget principal, extiende la clase base de todos los widgets del tablero: CWidget. Necesario para anular el comportamiento predeterminado del widget.

La clase Widget debe estar ubicada en el directorio raíz del widget (por ejemplo, zabbix/ui/modules/my_custom_widget).

Ejemplo de 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 clase WidgetForm extiende la clase predeterminada CWidgetForm y contiene un conjunto de campos CWidgetField que son necesarios para definir la estructura de almacenamiento de configuración del widget en la base de datos y manejar la validación de entradas.

La clase WidgetForm debe estar ubicada en el directorio includes. Si la clase tiene un nombre diferente, el nombre debe especificarse en el parámetro widget/form_class en el archivo manifest.json.

ejemplo de 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 function addFields(): self {
       return $this
       ->addField(
       (new CWidgetFieldMultiSelectItem('itemid', _('Item')))
       ->setFlags(CWidgetField::FLAG_NOT_EMPTY | CWidgetField::FLAG_LABEL_ASTERISK)
       ->setMultiple(false)
       ->setFilterParameter('numeric', true)
       )
       ->addField(
       new CWidgetFieldTextBox('description', _('Description'))
       )
       ->addField(
       (new CWidgetFieldColor('chart_color', _('Color')))->setDefault('FF0000')
       );
       }
       }

CWidgetFormView

La clase CWidgetFormView es necesaria para especificar la lógica de presentación de los campos definidos en la clase WidgetForm, determinando su apariencia y comportamiento cuando se representan en la vista de configuración.

La clase CWidgetFormView admite los siguientes métodos:

  • addField() - recibe una instancia de la clase CWidgetFieldView como parámetro; cada clase CWidgetField tiene una clase CWidgetFieldView respectiva para usar en la vista de configuración del widget.
  • includeJsFile() - permite agregar un archivo JavaScript a la vista de configuración del widget.
  • addJavaScript() - permite agregar JavaScript en línea que se ejecutará tan pronto como se cargue la vista de configuración del widget.

La clase CWidgetFormView debe estar ubicada en el directorio views.

ejemplo de views/widget.edit.php

<?php
       
       /**
        * My custom widget form view.
        *
        * @var CView $this
        * @var array $data
        */
       
       use Zabbix\Widgets\Fields\CWidgetFieldGraphDataSet;
       
       (new CWidgetFormView($data))
       ->addField(
       new CWidgetFieldMultiSelectItemView($data['fields']['itemid'], $data['captions']['items']['itemid'])
       )
       ->addField(
       new CWidgetFieldTextBoxView($data['fields']['description']),
       'js-advanced-configuration'
       )
       ->addField(
       new CWidgetFieldColorView($data['fields']['chart_color']),
       'js-advanced-configuration'
       )
       ->includeJsFile('widget.edit.js.php')
       ->addJavaScript('my_widget_form.init('.json_encode([
       'color_palette' => CWidgetFieldGraphDataSet::DEFAULT_COLOR_PALETTE
       ], JSON_THROW_ON_ERROR).');')
       ->show();

JavaScript

Se puede utilizar una clase de JavaScript para agregar comportamiento dinámico e interactividad a la vista de configuración del widget. Por ejemplo, puede inicializar un selector de color, definido en la clase CWidgetFormView.

La clase JavaScript debe cargarse con el formulario, por lo tanto, se debe hacer referencia a ella en la clase CWidgetFormView utilizando los métodos includeJsFile() y addJavaScript().

En el siguiente ejemplo, se crea inmediatamente una instancia de clase singleton y se almacena con el nombre window.my_custom_widget_form. Por lo tanto, al abrir el formulario por segunda vez se volverá a crear la instancia.

La clase JavaScript debe estar ubicada en el directorio views.

ejemplo de views/widget.edit.js.php

<?php
       
       use Modules\LessonGaugeChart\Widget;
       
       ?>
       
       window.widget_lesson_gauge_chart_form = new class {
       
       init({color_palette}) {
       this._advanced_configuration = document.getElementById('adv_conf');
       
       this._advanced_configuration.addEventListener('change', () => this.updateForm());
       
       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'); });
       }
       
       this.updateForm();
       }
       
       updateForm() {
       const show_advanced_configuration = this._advanced_configuration.checked;
       
       for (const element of this._form.querySelectorAll('.js-advanced-configuration')) {
       element.style.display = show_advanced_configuration ? '' : 'none';
       }
       }
       };

CWidgetField

La clase CWidgetField es una clase base de la cual se heredan todas las clases de campos de formulario (CWidgetFieldCheckBox, CWidgetFieldTextArea, CWidgetFieldRadioButtonList, etc.). Las clases que extienden CWidgetField son responsables de recibir, guardar y validar los valores de configuración del widget.

Las siguientes clases CWidgetField están disponibles.

Clase CWidgetField Tipo de campo de base de datos Descripción
CWidgetFieldCheckBox int32 Casilla de verificación única.
CWidgetFieldCheckBoxList matriz de int32 Varias casillas de verificación en un solo campo de configuración.
CWidgetFieldColor cadena Campo de selección de color.
CWidgetFieldDatePicker cadena Campo de selección de fecha.
CWidgetFieldHostPatternSelect string Campo de selección múltiple que permite seleccionar uno o varios hosts. Admite la definición de patrones de nombres de host (se seleccionarán todos los hosts coincidentes).
CWidgetFieldIntegerBox int32 Campo para ingresar un número entero. Se puede utilizar para configurar valores mínimos y máximos.
CWidgetFieldLatLng cadena Cuadro de texto que permite ingresar latitud, longitud y nivel de zoom del mapa separados por comas.
CWidgetFieldMultiSelectAction ID Campo de selección múltiple para seleccionar acciones (de la lista de acciones definidas en Alertas → Acciones).
CWidgetFieldMultiSelectGraph ID Campo de selección múltiple para seleccionar gráficos personalizados.
CWidgetFieldMultiSelectGraphPrototype ID Campo de selección múltiple para seleccionar prototipos de gráficos personalizados.
CWidgetFieldMultiSelectGroup ID Campo de selección múltiple para seleccionar grupos de hosts.
CWidgetFieldMultiSelectHost ID Campo de selección múltiple para seleccionar hosts.
CWidgetFieldMultiSelectItem ID Campo de selección múltiple para seleccionar métricas.
CWidgetFieldMultiSelectItemPrototype ID Campo de selección múltiple para seleccionar prototipos de métricas.
CWidgetFieldMultiSelectMediaType ID Campo de selección múltiple para seleccionar tipos de medios.
CWidgetFieldMultiSelectService ID Campo de selección múltiple para seleccionar servicios.
CWidgetFieldMultiSelectSla ID Campo de selección múltiple para seleccionar SLA.
CWidgetFieldMultiSelectUser ID Campo de selección múltiple para seleccionar usuarios.
CWidgetFieldNumericBox string Campo para ingresar un número flotante.
CWidgetFieldRadioButtonList int32 Grupo de cuadros de radio que consta de uno o más cuadros de radio.
CWidgetFieldRangeControl int32 Deslizador para seleccionar un valor de tipo entero.
CWidgetFieldSelect int32 Cuadro de selección desplegable.
CWidgetFieldSeverities matriz de int32 CWidgetFieldCheckBoxList preestablecido con gravedades de activación.
CWidgetFieldTags matriz de (string, int32, string) Permite configurar una o más filas de filtro de etiquetas.
CWidgetFieldTextArea string Área de texto para ingresar texto de varias líneas.
CWidgetFieldTextBox cadena Cuadro de texto para ingresar texto de una sola línea.
CWidgetFieldTimeZone cadena Desplegable con zonas horarias.
CWidgetFieldUrl cadena Cuadro de texto que permite ingresar URL.

Se han creado las siguientes clases CWidgetField para widgets particulares. Estas clases tienen casos de uso muy específicos, pero también se pueden reutilizar si es necesario.

Clase CWidgetField Tipo de campo de base de datos Descripción
CWidgetFieldColumnsList matriz de (varios mixtos) Para el widget Hosts principales. Cree una tabla con columnas personalizadas de tipos permitidos.
CWidgetFieldGraphDataSet matriz de (múltiples mixtos) Para el widget Graph. Configurar la configuración del conjunto de datos y todas las opciones relacionadas.
CWidgetFieldGraphOverride matriz de (múltiples mixtos) Para el widget Graph. Anulaciones de configuración para equipos/métricas específicos. Se puede anular cualquier configuración de conjunto de datos.
CWidgetFieldNavTree string Para el widget Árbol de navegación del mapa. Reemplaza la vista del widget en modo de edición con el árbol de selección de mapas.
CWidgetFieldReference string Para el widget Árbol de navegación del mapa. Crea un identificador único para este widget en el tablero. Se utiliza para hacer referencia a este widget desde otros widgets.
CWidgetFieldSelectResource ID Para el widget Mapa. Permite seleccionar el mapa de red de Zabbix.
CWidgetFieldThresholds matriz de (cadena, cadena) Para el widget Host principales. Permite configurar pares de colores y números.
CWidgetFieldWidgetSelect cadena Para el widget Mapa. Permite seleccionar un árbol de navegación de mapas desde el tablero actual. Debe usarse en combinación con CWidgetFieldReference en el widget Árbol de navegación del mapa.