[comment]: # translation:outdated

[comment]: # aside:1

[comment]: # ({b311df1e-8fe7205c})
# Креирајте модул (водич)

[comment]: # ({/b311df1e-8fe7205c})

[comment]: # ({98067368-5fb5b83a})
Ово је водич корак по корак који показује како да направите једноставан Zabbix кориснички интерфејс модул.Све датотеке овог модула можете преузети као ZIP  архиву: [MyAddress.zip](../../../../assets/en/devel/modules/examples/MyAddress.zip).

[comment]: # ({/98067368-5fb5b83a})

[comment]: # ({5fe8674d-5ce71b9d})
### Шта ћеш изградити

Током овог водича, прво ћете креирати модул кориснички интерфејса који додаје нови одељак менија *Моја адреса*а затим га конвертујте у [more advanced](#part-iii---module-action) модул корисничког интерфејса који поставља HTTP захтев на *https://api.seeip.org* и приказује одговор - IP адресу вашег рачунара - на новој страници у новокреираном одељку менија *Моја адреса*.Ево како ће готов модул изгледати:

![](../../../../assets/en/devel/modules/tutorials/module/my_address_finished.png){width="600"}

[comment]: # ({/5fe8674d-5ce71b9d})

[comment]: # ({a5c86d2c-8c2bcd9e})
### Part I - Нови одељак менија

[comment]: # ({/a5c86d2c-8c2bcd9e})

[comment]: # ({9c416cbb-1d4de634})
##### Додајте празан модул у кориснички интерфејс Zabbix-а 

1. .Креирајте директоријум *MyAddress* у *modules* директоријум ваше Zabbix инсталације корисничког интерфејса (на пример, *zabbix/ui/modules*).

2. Направите датотеку *manifest.json* са основним метаподацима модула (погледајте опис подржаних [параметара](../file_structure/manifest)).


**ui/modules/MyAddress/manifest.json**

```json
{
    "manifest_version": 2.0,
    "id": "my-address",
    "name": "My IP Address",
    "version": "1.0",
    "namespace": "MyAddress",
    "description": "My External IP Address."
}
```

3. У корисничком интерфејсу Zabbix-a, идите на *Администрација → Опште → Модули* одељак и кликните на дугме *Скенирај директоријум*.

![](../../../../assets/en/devel/modules/tutorials/widget/scan_dir.png)

4. Пронађите нови модул *Моја IP адреса* на листи и кликните на хипервезу "Онемогућено" да бисте променили статус модула из "Онемогућено" у "Омогућено"  (ако не видите свој модул на листи, проверите [дозволе](/devel/modules/troubleshooting#module-is-not-detected)).

![](../../../../assets/en/devel/modules/tutorials/module/module_register.png){width="600"}

Модул је сада регистрован на корисничком интерфејсу. Међутим, то још није видљиво, јер још увек треба да дефинишете функционалност модула. Када додате садржај у директоријум модула, одмах ћете видети промене на корисничком интерфејсу Zabbix-a након освежавања странице.

[comment]: # ({/9c416cbb-1d4de634})

[comment]: # ({64c4a481-d88b8114})
##### Направите одељак менија

1. Креирајте датотеку *Module.php*  у директоријуму *MyAdress*.

Ова датотека имплементира нову класу *Моdule* која проширује подразумевану класу *CModule*.
Класа *Module* ће уметнути нови одељак менија *My Adress* у главни мени.

Метода *setAction()* специфицира радњу која ће се извршити након клика на одељак менија.
За почетак, можете користити унапред дефинисану акцију *userprofile.edit*, која ће отворити страницу *Кориснички профил*.
У [part III](#part-iii---module-action) овог упутства, научићете како да креирате прилагођену радњу.

**ui/modules/MyAddress/Module.php**

```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'));
    }
}
```

:::noteclassic
Можете да замените `'userprofile.edit'` са другим радњама, на пример, `'charts.view'` (отвара прилагођене графиконе), `'problems.view'` (отвара *Мониторинг → Проблеми*) или `'report.status'` (отвара извештај *Информације о систему*).
:::

3. Освежите Zabbix кориснички интерфејс. Сада постоји нови одељак *Моја адреса* на дну главног менија Zabbix-а.
Кликните на *Моја адреса* да отворите страницу *Кориснички профил*.

![](../../../../assets/en/devel/modules/tutorials/module/my_address_top_menu.png){width="600"}

[comment]: # ({/64c4a481-d88b8114})

[comment]: # ({89dbfda8-5c3fc480})
### Part II - Промена локације одељка менија

У овом делу ћете преместити одељак менија *Моја адреса* у одељак *Надгледање* и затим му додати угнежђени мени.
Као резултат тога, корисници ће моћи да приступе двема страницама подменија из одељка менија *Надгледање → Моја адреса*.

1. Отворите и уредите датотеку *Module.php*.

**ui/modules/MyAddress/Module.php**


```php
<?php

именски простор Modules\MyAdress;

користите 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')
            );
            }
}
```

2. Освежите Zabbix кориснички интерфејс. Проширите одељак менија *Надгледање* и обратите пажњу да се одељак *Моја адреса* сада налази испод одељка *Откривање*.

![](../../../../assets/en/devel/modules/tutorials/module/my_address_monitoring.png){width="600"}

3. Да бисте додали угнеждене странице у одељак менија *Моја адреса*, поново отворите и уредите датотеку *Module.php*.

Овај корак креира два пододељка:

- *Спољни IP* који извршава нову акцију 'my.address' која ће бити дефинисана у следећим корацима;
- *Кориснички профил* који извршава унапред дефинисану радњу 'userprofile.edit' за отварање странице *Кориснички профил*.

Имајте на уму да за угнеждени мени морате да користите класу *CMenu* поред класа коришћених у претходним корацима.

**ui/modules/MyAddress/Module.php**

```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')
     ])
     )
     );
     }
}
```

4. Освежите Zabbix кориснички интерфејс. Обратите пажњу на то да одељак менија *Моја адреса* сада садржи мени трећег нивоа са две странице - *Спољна IP адреса* и *Кориснички профил*.

![](../../../../assets/en/devel/modules/tutorials/module/my_address_nested.png){width="600"}

[comment]: # ({/89dbfda8-5c3fc480})

[comment]: # ({6061bdad-8798eff6})
### Part III - Акције модула

Акција је имплементирана у два фајла - *actions/MyAddress.php* и *views/my.address.php*.
Датотека ***actions/MyAddress.php*** брине о имплементацији пословне логике, док је датотека ***views/my.address.php*** одговорна за приказ.

1. Креирајте директоријум *actions* у директоријуму *MyAddress*.

2. Креирајте датотеку *MyAddress.php* у директоријуму *actions*.

Логика акције ће бити дефинисана у класи *MyAddress*.
Ова класа радње ће имплементирати четири функције: *init()*, *checkInput()*, *checkPermissions()* и *doAction()*.
Zabbix корицнички интерфејс позива функцију *doAction()* када се захтева акција.
Ова функција је одговорна за пословну логику модула.

::: noteimportant
Подаци морају бити организовани као асоцијативни низ.
Низ може бити вишедимензионалан и може садржати све податке које очекује приказ.
:::

**ui/modules/MyAddress/actions/MyAddress.php**

```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);
    }
}
```

3. Креирајте нови директоријум *views* у директоријуму *MyAddress*.

4. Креирајте датотеку *my.address.php* у директоријуму *views* и дефинишите приказ модула.

Имајте на уму да је променљива `$data` доступна у приказу без посебног дефинисања.
Оквир аутоматски прослеђује асоцијативни низ у приказ.

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

```php
<?php

(new CHtmlPage())
      ->setTitle(_('The HTML Title of My Address Page'))
      ->addItem(new CDiv($data['my-ip']))
      ->show();
```

5. Радња модула мора бити регистрована у датотеци *manifest.json*. Отворите *manifest.json* и додајте нови објекат "actions" који садржи:

- акциони кључ са именом радње написаним малим словима (а-z) и речима раздвојеним тачкама (на пример, `my.address`);
- назив класе акције (`МyAddress`) као вредност за кључ `class` објекта `my.address`;
- име приказа акције (`my.address`) као вредност за кључ `view` објекта `my.address`.

**ui/modules/MyAddress/manifest.json**

```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"
     }
     }
}
```

6. Освежите Zabbix кориснички интерфејс. Кликните на *Моја адреса → Екстерни IP* да бисте видели IP адресу свог рачунара.

![](../../../../assets/en/devel/modules/tutorials/module/my_address_finished.png){width="600"}

[comment]: # ({/6061bdad-8798eff6})
