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().