Utwórz moduł (samouczek)
To jest samouczek krok po kroku, który pokazuje, jak utworzyć prosty moduł front-endu Zabbix. Możesz pobrać wszystkie pliki tego modułu jako archiwum ZIP: MyAddress.zip.
Co zbudujesz
Podczas tego samouczka najpierw zbudujesz moduł front-end, który dodaje nową sekcję menu Mój adres, a następnie przekonwertujesz go na bardziej zaawansowany moduł front-end, który wysyła żądanie HTTP do https://api.seeip.org i wyświetla odpowiedź — adres IP Twojego komputera — na nowej stronie w nowo utworzonej sekcji menu Mój adres. Oto jak będzie wyglądał ukończony moduł:

Część I - Podstawowy moduł
Dodaj pusty moduł do frontendu Zabbix
- Utwórz katalog MyAddress w katalogu modules instalacji frontendu Zabbix (na przykład zabbix/ui/modules).
- Utwórz plik manifest.json z podstawowymi metadanymi modułu (zobacz opis obsługiwanych parametrów).
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."
}
- W interfejsie użytkownika Zabbix przejdź do sekcji Administracja → Ogólne → Moduły i kliknij przycisk Skanuj katalog.

- Znajdź nowy moduł My IP Address na liście i kliknij hiperłącze „Wyłączony”, aby zmienić status modułu z „Wyłączony” na „Włączony” (jeśli nie widzisz swojego modułu na liście, sprawdź uprawnienia).

Moduł jest teraz zarejestrowany w frontendzie. Jednak nie jest jeszcze widoczny, ponieważ nadal musisz zdefiniować funkcjonalność modułu. Po dodaniu zawartości do katalogu modułu, natychmiast zobaczysz zmiany w frontendzie Zabbix po odświeżeniu strony.
Utwórz sekcję menu
- Utwórz plik Module.php w katalogu MyAddress.
Ten plik implementuje nową klasę Module, która rozszerza domyślną klasę CModule. Klasa Module wstawi nową sekcję menu My Address do menu głównego.
Metoda setAction() określa akcję, która zostanie wykonana po kliknięciu sekcji menu. Na początek możesz użyć wstępnie zdefiniowanej akcji userprofile.edit, która otworzy stronę User profile. W części III tego samouczka dowiesz się, jak utworzyć niestandardową akcję.
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'));
}
}
Możesz zastąpić 'userprofile.edit' innymi akcjami, na przykład 'charts.view' (otwiera niestandardowe wykresy), 'problems.view' (otwiera Monitorowanie → Problemy) lub 'report.status' (otwiera raport Informacje o systemie).
- Odśwież interfejs użytkownika Zabbix. Na dole głównego menu Zabbix znajduje się teraz nowa sekcja My address. Kliknij My address, aby otworzyć stronę User profile.

Część II - Zmiana lokalizacji sekcji menu
W tej części przeniesiesz sekcję menu My address do sekcji Monitorowanie, a następnie dodasz do niej zagnieżdżone menu. W rezultacie użytkownicy będą mogli uzyskać dostęp do dwóch stron podmenu z sekcji menu Monitorowanie → My address.
- Otwórz i edytuj plik 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')
);
}
}
- Odśwież interfejs użytkownika Zabbix. Rozwiń sekcję menu Monitoring i zauważ, że sekcja My address znajduje się teraz poniżej sekcji Odkrywanie.

- Aby dodać zagnieżdżone strony do sekcji menu Mój adres, otwórz i edytuj ponownie plik Module.php.
Ten krok tworzy dwie podsekcje:
- Zewnętrzny adres IP, który wykonuje nową akcję 'my.address', która zostanie zdefiniowana w kolejnych krokach;
- Profil użytkownika, który wykonuje wstępnie zdefiniowaną akcję 'userprofile.edit', aby otworzyć stronę Profil użytkownika.
Należy pamiętać, że w przypadku zagnieżdżonego menu należy użyć klasy CMenu oprócz klas użytych w poprzednich krokach.
ui/modules/MyAddress/Module.php
<?php
namespace Modules\MyAddress;
użyj 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(_('Mój adres')))->setSubMenu(
new CMenu([
(new CMenuItem(_('Zewnętrzny adres IP')))->setAction('my.address'),
(new CMenuItem(_('Profil użytkownika')))->setAction('userprofile.edit')
])
)
);
}
}
- Odśwież frontend Zabbix. Zauważ, że sekcja menu Mój adres zawiera teraz menu trzeciego poziomu z dwiema stronami - Zewnętrzny adres IP i Profil użytkownika.

Część III - Akcja modułu
Akcja jest implementowana w dwóch plikach - actions/MyAddress.php i views/my.address.php. Plik actions/MyAddress.php zajmuje się implementacją logiki biznesowej, podczas gdy plik views/my.address.php odpowiada za widok.
-
Utwórz katalog actions w katalogu MyAddress.
-
Utwórz plik MyAddress.php w katalogu actions.
Logika akcji zostanie zdefiniowana w klasie MyAddress. Ta klasa akcji zaimplementuje cztery funkcje: init(), checkInput(), checkPermissions() i doAction(). Frontend Zabbix wywołuje funkcję doAction(), gdy żądana jest akcja. Ta funkcja odpowiada za logikę biznesową modułu.
Dane muszą być zorganizowane jako tablica asocjacyjna. Tablica może być wielowymiarowa i może zawierać dowolne dane oczekiwane przez widok.
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);
}
}
-
Utwórz nowy katalog views w katalogu MyAddress.
-
Utwórz plik my.address.php w katalogu views i zdefiniuj widok modułu.
Należy zauważyć, że zmienna $data jest dostępna w widoku bez jej konkretnego definiowania.
Framework automatycznie przekazuje tablicę asocjacyjną do widoku.
ui/modules/MyAddress/views/my.address.php
<?php
(new CHtmlPage())
->setTitle(_('Tytuł HTML strony My Address'))
->addItem(new CDiv($data['my-ip']))
->show();
- Akcja modułu musi zostać zarejestrowana w pliku manifest.json. Otwórz manifest.json i dodaj nowy obiekt
actions, który zawiera:
- klucz akcji z nazwą akcji zapisaną małymi literami (a-z) i słowami oddzielonymi kropkami (na przykład
my.address); - nazwę klasy akcji (
MyAddress) jako wartość kluczaclassobiektumy.address; - nazwę widoku akcji (
my.address) jako wartość kluczaviewobiektumy.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"
}
}
}
- Odśwież interfejs użytkownika Zabbix. Kliknij Mój adres → Zewnętrzny adres IP, aby zobaczyć adres IP swojego komputera.
