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.
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')
]
];
}
}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')
);
}
}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:
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();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'); });
}
}
};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. |