Configuração

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

Widget

Classe principal do widget, estende a classe base de todos os widgets do dashboard - CWidget. Necessário para sobrescrever o comportamento padrão do widget.

A classe Widget deve estar localizada no diretório raiz do widget (por exemplo, zabbix/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;

    public function getTranslationStrings(): array {
        return [
            'class.widget.js' => [
                'No data' => _('No data')
            ]
        ];
    }
}

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 oferece os seguintes métodos:

  • addField() - recebe uma instância da classe CWidgetField como parâmetro; cada classe CWidgetField tem uma classe CWidgetFieldView correspondente para uso na visualização de configuração do widget.
  • addFieldset() - recebe uma instância da classe CWidgetFieldsGroupView, que combina os campos em um contêiner recolhível.
  • addFieldsGroup() - recebe uma instância de CWidgetFormFieldsetCollapsibleView, que combina visualmente os campos em um grupo (com uma borda).
  • includeJsFile() - permite adicionar um arquivo JavaScript à visualização de configuração do widget.
  • addJavaScript() - permite adicionar JavaScript embutido, 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

/**
 * 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

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.) são herdadas.
As classes que estendem CWidgetField são responsáveis por receber, salvar e validar valores de configuração do widget.

As seguintes classes CWidgetField estão disponíveis.

Classe CWidgetField Tipo de campo do banco de dados Descrição
CWidgetFieldCheckBox int32 Caixa de seleção única.
CWidgetFieldCheckBoxList array of int32 Várias 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ínimos e máximos.
CWidgetFieldLatLng string Caixa de texto para inserir latitude, longitude e nível de zoom do mapa, separados por vírgulas.
CWidgetFieldMultiSelect - Classe base para campos de seleção múltipla, estendida por todas as classes CWidgetFieldMultiSelect*.
CWidgetFieldMultiSelectAction ID Campo de seleção múltipla para selecionar ações na lista de ações definidas em Alertas > Ações.
CWidgetFieldMultiSelectGraph ID Campo de seleção múltipla para selecionar gráficos personalizados.
CWidgetFieldMultiSelectGraphPrototype ID Campo de seleção múltipla para selecionar protótipos de gráficos personalizados.
CWidgetFieldMultiSelectGroup ID Campo de seleção múltipla para selecionar grupos de hosts.
CWidgetFieldMultiSelectHost ID Campo de seleção múltipla para selecionar hosts.
CWidgetFieldMultiSelectHostInventory array of int32 Campo de seleção múltipla para selecionar campos do inventário de hosts.
CWidgetFieldMultiSelectItem ID Campo de seleção múltipla para selecionar itens.
CWidgetFieldMultiSelectItemPrototype ID Campo de seleção múltipla para selecionar protótipos de itens.
CWidgetFieldMultiSelectMap ID Campo de seleção múltipla para selecionar mapas.
CWidgetFieldMultiSelectMediaType ID Campo de seleção múltipla para selecionar tipos de mídia.
CWidgetFieldMultiSelectOverrideHost ID Campo de seleção múltipla para selecionar uma fonte de dados para hosts de um dashboard ou de outro widget.
CWidgetFieldMultiSelectService ID Campo de seleção múltipla para selecionar serviços.
CWidgetFieldMultiSelectSla ID Campo de seleção múltipla para selecionar SLAs.
CWidgetFieldMultiSelectUser ID Campo de seleção múltipla 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 seleção múltipla para selecionar hosts. Oferece suporte a padrões de nomes de hosts.
CWidgetFieldPatternSelectItem string Campo de seleção múltipla para selecionar itens. Oferece suporte a padrões de nomes de itens.
CWidgetFieldRadioButtonList int32 Grupo de botões de opção composto por um ou mais botões de opção.
CWidgetFieldRangeControl int32 Controle deslizante para selecionar um valor do tipo inteiro.
CWidgetFieldReference string Armazena um identificador exclusivo para este widget no dashboard; usado para a 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 filtros de tags.
CWidgetFieldTextArea string Área de texto para inserir texto com várias linhas.
CWidgetFieldTextBox string Caixa de texto para inserir texto em uma única linha.
CWidgetFieldThresholds array of (string, string) Permite configurar pares de cores e números.
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 para 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().