Configuração

Esta página descreve as classes que podem ser usadas para criar uma visualização de configuração do widget com campos de configuração personalizados. A exibição de configuração do widget é a parte do widget que permite ao usuário configurar os parâmetros do widget para presentation.

Widget

Classe primária de widget, estende a classe base de todos os widgets do painel - CWidget. Necessário para substituir o comportamento padrão do widget.

A classe Widget deve estar localizada no diretório raiz do widget (por exemplo, ui/modules/my_custom_widget).

Exemplo de Widget.php

<?php

namespace Modules\MyCustomWidget;

use Zabbix\Core\CWidget;

class Widget extends CWidget {

    public const MY_CONSTANT = 0;

    função pública getTranslationStrings(): array {
        retorna [
            'class.widget.js' => [
                'Sem dados' => _('Sem dados')
            ]
        ];
    }
}

WidgetForm

A classe WidgetForm estende a classe padrão CWidgetForm e contém um conjunto de campos CWidgetField que são necessários para definir a estrutura de armazenamento da configuração do widget no banco de dados e para lidar com a validação de entrada.

A classe WidgetForm deve estar localizada no diretório includes. Se a classe tiver um nome diferente, o nome deve ser especificado no parâmetro widget/form_class no arquivo manifest.json.

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

A classe CWidgetFormView é necessária para especificar a lógica de apresentação dos campos definidos na classe WidgetForm, determinando sua aparência e comportamento quando renderizados na visualização de configuração.

A classe CWidgetFormView suporta os seguintes métodos:

  • addField() - recebe uma instância da classe CWidgetFieldView como parâmetro; cada classe CWidgetField possui uma respectiva classe CWidgetFieldView para uso na visualização de configuração do widget.
  • addFieldset() - recebe uma instância da classe CWidgetFieldsGroupView que combina campos em um contêiner recolhível.
  • addFieldsGroup() - recebe uma instância de CWidgetFormFieldsetCollapsibleView que visualmente (com uma borda) combina campos em um grupo.
  • includeJsFile() - permite adicionar um arquivo JavaScript à visualização de configuração do widget.
  • addJavaScript() - permite adicionar JavaScript inline que será executado assim que a visualização de configuração do widget for carregada.

A classe CWidgetFormView deve estar localizada no diretório views.

Exemplo de views/widget.edit.php

<?php

/**
 * Minha visualização de formulário de widget personalizada.
 *
 * @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

Uma classe JavaScript pode ser usada para adicionar comportamento dinâmico e interatividade à visualização de configuração do widget. Por exemplo, você pode inicializar um seletor de cores, definido na classe CWidgetFormView.

A classe JavaScript deve ser carregada com o formulário, portanto, deve ser referenciada na classe CWidgetFormView usando os métodos includeJsFile() e addJavaScript().

No exemplo abaixo, uma instância singleton da classe é imediatamente criada e armazenada sob o nome window.my_custom_widget_form. Assim, ao abrir o formulário pela segunda vez, a instância será recriada.

A classe JavaScript deve estar localizada no diretório views.

Exemplo de 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

A classe CWidgetField é uma classe base da qual todas as classes de campos de formulário (CWidgetFieldCheckBox, CWidgetFieldTextArea, CWidgetFieldRadioButtonList, etc.) herdam. As classes que estendem CWidgetField são responsáveis por receber, salvar e validar os valores de configuração do widget.

As seguintes classes CWidgetField estão disponíveis.

Classe CWidgetField Tipo de campo no banco de dados Descrição
CWidgetFieldCheckBox int32 Caixa de seleção única.
CWidgetFieldCheckBoxList array of int32 Múltiplas caixas de seleção em um único campo de configuração.
CWidgetFieldColor string Campo de seleção de cor.
CWidgetFieldDatePicker string Campo de seleção de data.
CWidgetFieldIntegerBox int32 Campo para inserir um número inteiro. Pode ser usado para configurar valores mínimo e máximo.
CWidgetFieldLatLng string Caixa de texto que permite inserir latitude, longitude e nível de zoom do mapa separados por vírgula.
CWidgetFieldMultiSelect - Classe base para campos de multisseleção, estendida por todas as classes CWidgetFieldMultiSelect*.
CWidgetFieldMultiSelectAction ID Campo de multisseleção para selecionar ações da lista de ações definidas em Alertas → Ações.
CWidgetFieldMultiSelectGraph ID Campo de multisseleção para selecionar gráficos personalizados.
CWidgetFieldMultiSelectGraphPrototype ID Campo de multisseleção para selecionar protótipos de gráficos personalizados.
CWidgetFieldMultiSelectGroup ID Campo de multisseleção para selecionar grupos de hosts.
CWidgetFieldMultiSelectHost ID Campo de multisseleção para selecionar hosts.
CWidgetFieldMultiSelectHostInventory array of int32 Campo de multisseleção para selecionar campos de inventário do host.
CWidgetFieldMultiSelectItem ID Campo de multisseleção para selecionar items.
CWidgetFieldMultiSelectItemPrototype ID Campo de multisseleção para selecionar protótipos de item.
CWidgetFieldMultiSelectMap ID Campo de multisseleção para selecionar mapas.
CWidgetFieldMultiSelectMediaType ID Campo de multisseleção para selecionar tipos de mídia.
CWidgetFieldMultiSelectOverrideHost ID Campo de multisseleção para selecionar uma fonte de dados para hosts a partir de um dashboard ou de outro widget.
CWidgetFieldMultiSelectService ID Campo de multisseleção para selecionar serviços.
CWidgetFieldMultiSelectSla ID Campo de multisseleção para selecionar SLAs.
CWidgetFieldMultiSelectUser ID Campo de multisseleção para selecionar usuários.
CWidgetFieldNavTree array of (multiple mixed) Armazena uma estrutura de árvore de navegação de mapas para uso no widget Árvore de navegação de mapas.
CWidgetFieldNumericBox string Campo para inserir um número de ponto flutuante.
CWidgetFieldPatternSelect - Classe base para campos de seleção por padrão, estendida por todas as classes CWidgetPatternSelect*.
CWidgetFieldPatternSelectHost string Campo de multisseleção para selecionar hosts. Suporta padrões de nome de host.
CWidgetFieldPatternSelectItem string Campo de multisseleção para selecionar items. Suporta padrões de nome de item.
CWidgetFieldRadioButtonList int32 Grupo de botões de opção que consiste em um ou mais botões de opção.
CWidgetFieldRangeControl int32 Controle deslizante para selecionar um valor do tipo inteiro.
CWidgetFieldReference string Armazena um identificador único para este widget no dashboard; usado para comunicação entre widgets.
CWidgetFieldSelect int32 Caixa de seleção suspensa.
CWidgetFieldSeverities array of int32 CWidgetFieldCheckBoxList predefinido com severidades de trigger.
CWidgetFieldSparkline array of (multiple mixed) Permite configurar um gráfico sparkline.
CWidgetFieldTags array of (string, int32, string) Permite configurar uma ou mais linhas de filtro de tags.
CWidgetFieldTextArea string Área de texto para inserir texto em várias linhas.
CWidgetFieldTextBox string Caixa de texto para inserir texto em uma única linha.
CWidgetFieldThresholds array of (string, string) Permite configurar pares de cor e número.
CWidgetFieldTimePeriod array of string Campo de seleção de período de tempo.
CWidgetFieldTimeZone string Lista suspensa com fusos horários.
CWidgetFieldUrl string Caixa de texto que permite inserir URLs.

O comprimento máximo para campos int32 é de 10 caracteres, para campos ID é de 20 caracteres e para campos string é de 2048 caracteres. Para tipos compostos (por exemplo, array of (string, int32, string)), o limite se aplica a cada elemento individualmente. Restrições de comprimento específicas do campo podem ser definidas usando métodos como setMaxLength().