This is a translation of the original English documentation page. Help us make it better.

Maak een module (handleiding)

Dit is een stapsgewijze handleiding die laat zien hoe je een eenvoudige Zabbix-frontendmodule kunt maken. Je kunt alle bestanden van deze module downloaden als een ZIP-archief: MyAddress.zip.

Wat je gaat bouwen

Tijdens deze tutorial ga je eerst een frontend-module bouwen die een nieuwe sectie Mijn Adres aan het menu toevoegt. Vervolgens zul je het converteren naar een geavanceerdere frontend-module die een HTTP-verzoek maakt naar https://api.seeip.org en het antwoord weergeeft - het IP-adres van je computer - op een nieuwe pagina in de zojuist gecreëerde Mijn Adres menu sectie. Zo ziet de afgewerkte module eruit:

Deel I - Nieuw menugedeelte

Voeg een lege module toe aan de Zabbix-frontend
  1. Maak een directory genaamd MyAddress in zabbix/ui/modules.

  2. Maak een bestand genaamd manifest.json aan met de basisgegevens van de module (zie de beschrijving van ondersteunde parameters).

ui/modules/MyAddress/manifest.json

{
           "manifest_version": 2.0,
           "id": "my-address",
           "name": "Mijn IP-adres",
           "version": "1.0",
           "namespace": "MyAddress",
           "description": "Mijn Externe IP-adres"
       }
  1. Ga in de Zabbix-frontend naar de sectie Beheer → Algemeen → Modules en klik op de knop Map scannen.

  1. Zoek de nieuwe module Mijn IP-adres in de lijst en klik op de hyperlink "Uitgeschakeld" om de status van de module te wijzigen van "Uitgeschakeld" naar "Ingeschakeld".

De module is nu geregistreerd in de frontend. Hij is echter nog niet zichtbaar, omdat je nog steeds de functionaliteit van de module moet definiëren. Zodra je inhoud aan de modulemap toevoegt, zul je onmiddellijk de wijzigingen zien in de Zabbix-frontend wanneer je de pagina vernieuwt.

Creëer een menusectie
  1. Maak een bestand genaamd Module.php aan in de MyAddress-map.

Dit bestand implementeert een nieuwe Module-klasse die de standaard CModule-klasse uitbreidt. De Module-klasse zal een nieuwe Mijn Adres menusectie toevoegen aan het hoofdmenu.

De methode setAction() geeft een actie aan die wordt uitgevoerd wanneer er op de menusectie wordt geklikt. Je kunt in eerste instantie de vooraf gedefinieerde actie userprofile.edit gebruiken, die de pagina Gebruikersprofiel opent. In deel III van deze tutorial leer je hoe je een aangepaste actie kunt maken.

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(_('Mijn Adres')))
                   ->setAction('userprofile.edit'));
           }
       }

Je kunt 'userprofile.edit' vervangen door andere acties, bijvoorbeeld 'charts.view' (opent aangepaste grafieken), 'problems.view' (opent Monitoring → Problemen) of 'report.status' (opent rapport over Systeeminformatie).

  1. Vernieuw de Zabbix-frontend. Er is nu een nieuwe Mijn Adres sectie onderaan het hoofdmenu van Zabbix. Klik op Mijn Adres om de pagina Gebruikersprofiel te openen.

Deel II - Verandering van locatie menusectie

In dit deel verplaats je de menusectie Mijn Adres naar de sectie Monitoring. Hierdoor kunnen gebruikers toegang krijgen tot twee submenupagina's vanuit de Monitoring → Mijn Adres menusectie.

  1. Open en bewerk het bestand 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(_('Ontdekking'),
                               (new CMenuItem(_('Mijn Adres')))->setAction('userprofile.edit')
                           );
           }
       }
  1. Vernieuw de Zabbix-frontend. Vouw de sectie Monitoring uit en merk op dat de sectie Mijn Adres zich nu onder de sectie Ontdekking bevindt.

Deel III - Module actie

Een actie wordt geïmplementeerd in twee bestanden - actions/MyAddress.php en views/my.address.php. Het bestand actions/MyAddress.php zorgt voor de implementatie van de business logica, terwijl het bestand views/my.address.php verantwoordelijk is voor de weergave.

  1. Maak een map genaamd actions in de MyAddress-map.

  2. Maak een bestand genaamd MyAddress.php in de actions-map.

De logica van de actie wordt gedefinieerd in de klasse MyAddress. Deze actieklasse zal vier functies implementeren: init(), checkInput(), checkPermissions() en doAction(). De doAction()-functie wordt aangeroepen door de Zabbix-frontend wanneer de actie wordt aangevraagd. Deze functie is verantwoordelijk voor de business logica van de module.

De data moet georganiseerd zijn als een associatieve array. De array kan meerdere dimensies hebben en kan elke data bevatten die de view verwacht.

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);
           }
       }
  1. Maak een nieuwe map genaamd views in de MyAddress-map.

  2. Maak een bestand genaamd my.address.php in de views-map en definieer de weergave van de module.

Merk op dat de variabele $data beschikbaar is in de view zonder deze expliciet te definiëren. Het framework geeft automatisch de associatieve array door aan de view.

ui/modules/MyAddress/views/my.address.php

<?php
       
       (new CHtmlPage())
           ->setTitle(_('De HTML-titel van mijn adrespagina'))
           ->addItem(new CDiv($data['my-ip']))
           ->show();
  1. De module-actie moet worden geregistreerd in het manifest.json-bestand. Open manifest.json en voeg een nieuw object actions toe dat het volgende bevat:
  • de actiesleutel met de naam van de actie in kleine letters (a-z) en met punten gescheiden woorden (bijvoorbeeld my.address);
  • de naam van de actieklasse (MyAddress) als waarde voor de sleutel class van het object my.address;
  • de naam van de actieweergave (my.address) als waarde voor de sleutel view van het object my.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"
               }
           }
       }
  1. Open Module.php en verander de naam van de actie in de setAction()-methode naar my.address.

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('my.address')
                           );
           }
       }
  1. Vernieuw de Zabbix-frontend. Klik op de menusectie Mijn Adres om het IP-adres van je computer te zien.