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 manipular a validação de entrada.

A classe WidgetForm deve estar localizada no diretório includes. Se a classe tiver um nome diferente, o nome deverá 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 {

    função pública addFields(): self {
        return $this
            ->addField(
                (novo 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

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 exibição de configuração.

A classe CWidgetFormView é compatível com os seguintes métodos:

  • addField() - recebe uma instância da classe CWidgetFieldView como parâmetro; Cada classe CWidgetField tem uma respectiva classe CWidgetFieldView para uso na exibição de configuração do widget.
  • includeJsFile() - permite adicionar um arquivo JavaScript à visualização de configuração do widget.
  • addJavaScript() - permite adicionar JavaScript em linha 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 personalizado.
 *
 * @var CView $this
 * @var array $data
 */

use Zabbix\Widgets\Fields\CWidgetFieldGraphDataSet;

(novo 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

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 de classe singleton é imediatamente criada e armazenada sob o nome window.my_custom_widget_form. Assim, abrir o formulário pela segunda vez recriará a instância.

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 de jQuery('.<?= ZBX_STYLE_COLOR_PICKER ?> input')) {
jQuery(colorpicker).colorpicker();
}

const overlay = overlays_stack.getById('widget_properties');

for (const event de ['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.
CWidgetFieldColumnsList array of (multiple mixed) Armazena uma tabela com colunas personalizadas dos tipos permitidos para uso no widget Top hosts.
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 Alerts → Actions.
CWidgetFieldMultiSelectGraph ID Campo de multisseleção para selecionar gráficos personalizados.
CWidgetFieldMultiSelectGraphPrototype ID Campo de multisseleção para selecionar protótipos de gráfico personalizados.
CWidgetFieldMultiSelectGroup ID Campo de multisseleção para selecionar grupos de hosts.
CWidgetFieldMultiSelectHost ID Campo de multisseleção para selecionar hosts.
CWidgetFieldMultiSelectItem ID Campo de multisseleção para selecionar itens.
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 Map navigation tree.
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 itens. Suporta padrões de nome de item.
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 ú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.
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().