Crear un módulo (tutorial)
Este es un tutorial paso a paso que muestra cómo crear un módulo sencillo para la interfaz web de Zabbix. Puede descargar todos los archivos de este módulo como un archivo ZIP: MyAddress.zip.
Qué crearás
Durante este tutorial, primero crearás un módulo de frontend que añade una nueva sección de menú Mi dirección y, a continuación, lo convertirás en un módulo de frontend más avanzado que realiza una solicitud HTTP a https://api.seeip.org y muestra la respuesta —la dirección IP de tu ordenador— en una nueva página de la sección de menú Mi dirección recién creada. Así se verá el módulo terminado:

Parte I - Nueva sección de menú
Añadir un módulo vacío al frontend de Zabbix
-
Cree un directorio MyAddress en el directorio modules de la instalación del frontend de Zabbix (por ejemplo, zabbix/ui/modules).
-
Cree un archivo manifest.json con los metadatos básicos del módulo (consulte la descripción de los parámetros compatibles).
ui/modules/MyAddress/manifest.json
{
"manifest_version": 2.0,
"id": "my-address",
"name": "My IP Address",
"version": "1.0",
"namespace": "MyAddress",
"description": "My External IP Address."
}
- En el frontend de Zabbix, vaya a la sección Administration > General > Modules y haga clic en el botón Scan directory.

- Busque el nuevo módulo My IP Address en la lista y haga clic en el hipervínculo "Disabled" para cambiar el estado del módulo de "Disabled" a "Enabled" (si el módulo no aparece en la lista, consulte la sección de solución de problemas).

El módulo ya está registrado en el frontend. Sin embargo, todavía no está visible, porque debe definir la funcionalidad del módulo. Una vez que añada contenido al directorio del módulo, verá inmediatamente los cambios en el frontend de Zabbix al actualizar la página.
Crear una sección del menú
- Cree un archivo Module.php en el directorio MyAddress.
Este archivo implementa una nueva clase Module que extiende la clase predeterminada CModule. La clase Module insertará una nueva sección de menú My Address en el menú principal.
El método setAction() especifica una acción que se ejecutará al hacer clic en la sección del menú. Para empezar, puede utilizar la acción predefinida userprofile.edit, que abrirá la página User profile. En la parte III de este tutorial, aprenderá a crear una acción personalizada.
ui/modules/MyAddress/Module.php
<?php
namespace Modules\MyAddress;
use Zabbix\Core\CModule,
APP,
CMenuItem;
class Module extends CModule {
public function init(): void {
APP::Component()->get('menu.main')
->add((new CMenuItem(_('My Address')))
->setAction('userprofile.edit'));
}
}
Puede reemplazar 'userprofile.edit' por otras acciones, por ejemplo, 'charts.view' (abre los gráficos personalizados), 'problems.view' (abre Monitoring > Problems) o 'report.status' (abre el informe System information).
- Actualice el frontend de Zabbix. Ahora hay una nueva sección My Address en la parte inferior del menú principal de Zabbix. Haga clic en My Address para abrir la página User profile.

Parte II - Cambio de ubicación de la sección del menú
En esta parte, moverá la sección del menú My Address a la sección Monitoring y, a continuación, le añadirá un menú anidado. Como resultado, los usuarios podrán acceder a dos páginas de submenú desde la sección del menú Monitoring > My Address.
- Abra y edite el archivo Module.php.
ui/modules/MyAddress/Module.php
<?php
namespace Modules\MyAddress;
use Zabbix\Core\CModule,
APP,
CMenuItem;
class Module extends CModule {
public function init(): void {
APP::Component()->get('menu.main')
->findOrAdd(_('Monitoring'))
->getSubmenu()
->insertAfter(_('Discovery'),
(new CMenuItem(_('My Address')))->setAction('userprofile.edit')
);
}
}
- Actualice el frontend de Zabbix. Expanda la sección del menú Monitoring y observe que la sección My address ahora se encuentra debajo de la sección Discovery.

- Para añadir páginas anidadas a la sección del menú My Address, abra y edite de nuevo el archivo Module.php.
Este paso crea dos subsecciones:
- External IP, que ejecuta una nueva acción
my.addressque se definirá en los pasos siguientes; - User profile, que ejecuta la acción predefinida
userprofile.editpara abrir la página User profile.
Tenga en cuenta que, para el menú anidado, debe utilizar la clase CMenu, además de las clases utilizadas en los pasos anteriores.
ui/modules/MyAddress/Module.php
<?php
namespace Modules\MyAddress;
use Zabbix\Core\CModule,
APP,
CMenu,
CMenuItem;
class Module extends CModule {
public function init(): void {
APP::Component()->get('menu.main')
->findOrAdd(_('Monitoring'))
->getSubmenu()
->insertAfter(_('Discovery'),
(new CMenuItem(_('My Address')))->setSubMenu(
new CMenu([
(new CMenuItem(_('External IP')))->setAction('my.address'),
(new CMenuItem(_('User profile')))->setAction('userprofile.edit')
])
)
);
}
}
- Actualice el frontend de Zabbix. Observe que la sección del menú My address ahora contiene un menú de tercer nivel con dos páginas: External IP y User profile.

Parte III - Acción del módulo
Una acción se implementa en dos archivos: actions/MyAddress.php y views/my.address.php. El archivo actions/MyAddress.php se encarga de implementar la lógica de negocio, mientras que el archivo views/my.address.php es responsable de la vista.
-
Cree un directorio actions en el directorio MyAddress.
-
Cree un archivo MyAddress.php en el directorio actions.
La lógica de la acción se definirá en la clase MyAddress. Esta clase de acción implementará cuatro funciones: init(), checkInput(), checkPermissions() y doAction(). El frontend de Zabbix llama a la función doAction() cuando se solicita la acción. Esta función es responsable de la lógica de negocio del módulo.
Los datos deben organizarse como una matriz asociativa. La matriz puede ser multidimensional y contener cualquier dato esperado por la vista.
ui/modules/MyAddress/actions/MyAddress.php
<?php
namespace Modules\MyAddress\Actions;
use CController,
CControllerResponseData;
class MyAddress extends CController {
public function init(): void {
$this->disableCsrfValidation();
}
protected function checkInput(): bool {
return true;
}
protected function checkPermissions(): bool {
return true;
}
protected function doAction(): void {
$data = ['my-ip' => file_get_contents("https://api.seeip.org")];
$response = new CControllerResponseData($data);
$this->setResponse($response);
}
}
-
Cree un nuevo directorio views en el directorio MyAddress.
-
Cree un archivo my.address.php en el directorio views y defina la vista del módulo.
Tenga en cuenta que la variable $data está disponible en la vista sin necesidad de definirla explícitamente.
El framework pasa automáticamente la matriz asociativa a la vista.
ui/modules/MyAddress/views/my.address.php
<?php
(new CHtmlPage())
->setTitle(_('The HTML Title of My Address Page'))
->addItem(new CDiv($data['my-ip']))
->show();
- La acción del módulo debe registrarse en el archivo manifest.json.
Abra manifest.json y añada un nuevo objeto
actionsque contenga:
- la clave de la acción con el nombre de la acción escrito en minúsculas (a-z) y con las palabras separadas por puntos (por ejemplo,
my.address); - el nombre de la clase de acción (
MyAddress) como valor de la claveclassdel objetomy.address; - el nombre de la vista de la acción (
my.address) como valor de la claveviewdel objetomy.address.
ui/modules/MyAddress/manifest.json
{
"manifest_version": 2.0,
"id": "my-address",
"name": "My IP Address",
"version": "1.0",
"namespace": "MyAddress",
"description": "My External IP Address.",
"actions": {
"my.address": {
"class": "MyAddress",
"view": "my.address"
}
}
}
- Actualice el frontend de Zabbix. Haga clic en My address > External IP para ver la dirección IP de su equipo.
