Você está visualizando a documentação da versão de desenvolvimento, que pode estar incompleta.
Esta página foi traduzida automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

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 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.) são herdadas. 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 do banco de dados Descrição
CWidgetFieldCheckBox int32 Caixa de seleção única.
CWidgetFieldCheckBoxList array de int32 Múltiplas caixas de seleção sob um único campo de configuração.
CWidgetFieldColor string Campo de seleção de cor.
CWidgetFieldDatePicker string Campo de seleção de data.
CWidgetFieldHostPatternSelect string Campo de seleção múltipla que permite selecionar um ou mais hosts. Suporta a definição de padrões de nomes de host (todos os hosts correspondentes serão selecionados).
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 que permite inserir latitude, longitude e nível de zoom do mapa separados por vírgula.
CWidgetFieldMultiSelectAction ID Campo de seleção múltipla para selecionar ações (da 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.
CWidgetFieldMultiSelectItem ID Campo de seleção múltipla para selecionar items.
CWidgetFieldMultiSelectItemPattern ID Campo de seleção múltipla para selecionar padrões de items.
CWidgetFieldMultiSelectItemPrototype ID Campo de seleção múltipla para selecionar protótipos de items.
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 (dashboard ou outro widget) contendo um host para o qual o widget pode exibir dados.
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.
CWidgetFieldNumericBox string Campo para inserir um número decimal.
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 Cria um identificador exclusivo para este widget no dashboard. Ele é usado para referenciar este widget a partir de outros widgets.
CWidgetFieldSelect int32 Caixa de seleção suspensa.
CWidgetFieldSeverities array de int32 CWidgetFieldCheckBoxList predefinido com severidades de triggers.
CWidgetFieldTags array de (string, int32, string) Permite configurar uma ou mais linhas de filtro de tags.
CWidgetFieldTextArea string Área de texto para inserir texto de várias linhas.
CWidgetFieldTextBox string Caixa de texto para inserir texto de uma única linha.
CWidgetFieldTimePeriod array de string Campo de seleção de período de tempo.
CWidgetFieldTimeZone string Lista suspensa com fusos horários.
CWidgetFieldThresholds array de (string, string) Permite configurar pares de cor e número.
CWidgetFieldUrl string Caixa de texto que permite inserir URLs.

As seguintes classes CWidgetField foram criadas para widgets específicos. Essas classes têm casos de uso muito específicos, mas também podem ser reutilizadas, se necessário.

Classe CWidgetField Tipo de campo do banco de dados Descrição
CWidgetFieldColumnsList array de (múltiplos tipos mistos) Para o widget Top hosts. Cria uma tabela com colunas personalizadas de tipos permitidos.
CWidgetFieldNavTree string Para o widget Árvore de navegação de mapas. Substitui a visualização do widget no modo de edição pela árvore de seleção de mapas.