[comment]: # translation:outdated

[comment]: # aside:1

[comment]: # attributes: notoc

[comment]: # ({fcf4f388-0ea8ed60})
# manifest.json

Каждому модулю необходим файл manifest.json.
Файл должен располагаться в главной директории модуля (например, *zabbix/ui/modules/module_name/manifest.json*).

Как необходимый минимум, файл manifest.json должен содержать следующие поля:

```json
{
    "manifest_version": 2.0,
    "id": "my_ip_address",
    "name": "My IP Address",
    "namespace": "MyIPAddress",
    "version": "1.0"
}
```
Параметры, поддерживаемые **manifest.json** (нажмите на параметр для более подробной информации):

|Параметр|Описание|Обязателен|
|--|--------|--|
|[manifest_version](#manifest-version)|Версия манифеста модуля.| Да|
|[id](#id) |Уникальный ID модуля. |^|
|[name](#name) |Имя модуля, которое будет отображаться в разделе Администрирование. |^|
|[namespace](#namespace) |Пространство имён PHP для классов модуля.|^|
|[version](#version) |Версия модуля. |^|
|[type](#type) |Тип модуля. Для виджетов необходимо указать *widget* | Да для виджетов, для остальных нет |
|[widget](#widget) |Конфигурация виджета. Используется только для виджетов. |^|
|[actions](#actions) | Действия для регистрации модуля. |^|
|[assets](#assets) | Стили CSS и файлы JavaScript, которые необходимо включить. | Нет |
|[author](#author) |Автор модуля. |^|
|[config](#config) |Значения по умолчанию для пользовательских параметров модуля. |^|
|[description](#description) |Описание модуля.|^|
|[url](#url) |Ссылка на описание модуля. |^|

[comment]: # ({/fcf4f388-0ea8ed60})

[comment]: # ({e6ddbfde-7863337e})
### manifest_version {#manifest-version}
Версия манифеста модуля. На данный момент поддерживается версия **2.0**.
*Тип*: Double

*Пример*: 
```json
"manifest_version": 2.0
```

[comment]: # ({/e6ddbfde-7863337e})

[comment]: # ({4a354b32-40db7411})

### id

Идентификатор модуля. Должен быть уникальным. Чтобы избежать конфликта имён в будущем, рекомендуется использовать для модулей префикс (имя автора или название компании, или любой другой).
Например, если модуль является примером для уроков и имя модуля «My module», то идентификатор будет «example_my_module».

*Тип*: String

*Пример*:

```json
"id": "example_my_module"
```

[comment]: # ({/4a354b32-40db7411})

[comment]: # ({6b60a366-1d94ce43})
### name

Имя модуля, которое будет отображаться в секторе Администрирование.

*Тип*: String

*Пример*
```json
"name": "My module"
```

[comment]: # ({/6b60a366-1d94ce43})

[comment]: # ({346a79b5-b1e94eb0})
### namespace

Пространство имён PHP для классов модулей

*Тип*: String

*Пример*:

```json
"namespace": "ClockWidget"
```

[comment]: # ({/346a79b5-b1e94eb0})

[comment]: # ({2801cc8a-6669130f})
### version

Версия модуля. Версия будет отображаться в секторе Администрирование.

*Тип*: String

*Пример*:

```json
"version": "1.0"
```

[comment]: # ({/2801cc8a-6669130f})

[comment]: # ({3d827d1e-2f2ecfb4})

### type

Тип модуля. Требуется для виджетов и должен быть равен "widget".

*Тип*: String

*По умолчанию*: "module"

*Пример*:

```json
"type": "widget"
```

[comment]: # ({/3d827d1e-2f2ecfb4})

[comment]: # ({9f849f5d-85cbb8b0})

### actions

Действия для регистрации в модуле.
Требуется определение ключа объекта *class* для каждого действия, остальные ключи действий не являются обязательными.

*Тип*: Object

Поддерживаемые ключи объекта, если *[type](#type)* равно *module*:

- **write.your.action.name** (object) - название действия следует писать  строчными буквами [a-z], разделяя слова точками.
    Поддерживает ключи:
    - **class** (string; обязательный) - имя класса действия.
    - **layout** (string) - макет действия. Поддерживаемые значения: *layout.json*, *layout.htmlpage* (по умолчанию), *null*.
    - **view** (string) - вид действия.

*Пример*:

```json
"actions": {
    "module.example.list": {
        "class": "ExampleList",
        "view": "example.list",
        "layout": "layout.htmlpage"
        }
    }
```

Поддерживаемые ключи объекта, если *[type](#type)* равно *widget*:

- **widget.{id}.view** (object) - имя файла и класса для просмотра виджета. Замените **{id}** значением [id](#id) виджета (например, *widget.example_clock.view*).
    Поддерживает ключи:
    - **class** (string; обязательный) - имя класса действия для режима просмотра виджета для расширения класса CControllerDashboardWidgetView по умолчанию.
      Исходный файл класса должен находиться в каталоге *actions*.
    - **view** (string) - вид виджета. Должен находиться в каталоге *views*.
      Если файлом представления является *widget.view.php*, который ожидается по умолчанию, этот параметр можно опустить.
      Если вы используете другое имя, укажите его здесь.
- **widget.{id}.edit** (object) - имя файла для просмотра конфигурации виджета. Замените **{id}** значением [id](#id) виджета (например, *widget.example_clock.edit*).
    Поддерживает ключи:
    - **class** (string; обязательный) - имя класса действия для режима просмотра конфигурации виджета. Исходный файл класса должен находиться в каталоге *actions*.
    - **view** (string) - вид конфигурации виджета. Должен находиться в каталоге *views*.
      Если файлом представления является *widget.edit.php*, который ожидается по умолчанию, этот параметр можно опустить.
      Если вы используете другое имя, укажите его здесь.

*Пример*: 

```json
"actions": {
    "widget.tophosts.view": {
        "class": "WidgetView"
    },
    "widget.tophosts.column.edit": {
        "class": "ColumnEdit",
        "view": "column.edit",
        "layout": "layout.json"
    }
}
```

[comment]: # ({/9f849f5d-85cbb8b0})

[comment]: # ({29793a59-a0998fce})

### assets

Стили CSS и файлы JavaScript для включения.

*Тип*: Object

*Поддерживаемые ключи объектов:*

- **css** (array) – файлы CSS для включения. Файлы должны находиться в папке *assets/css*.
- **js** (array) — файлы JavaScript для включения. Файлы должны находиться в папке *assets/js*.

*Пример*: 

```json
"assets": {
    "css": ["widget.css"],
    "js": ["class.widget.js"]
}
```

[comment]: # ({/29793a59-a0998fce})

[comment]: # ({199df252-0a7c568c})

### author

Автор модуля. Автор будет отображаться в разделе Администрирование.

*Тип*: String

*Пример*: 

```json
"author": "John Smith"
```

[comment]: # ({/199df252-0a7c568c})

[comment]: # ({e21b146a-1})

### config

Значения по умолчанию для опций модуля. Объект может содержать любые пользовательские ключи.
Если указано, эти значения будут записаны в базу данных во время регистрации модуля.
Новые переменные, добавленные позже, будут записаны при первом вызове.
В дальнейшем значения переменных можно будет изменить только непосредственно в базе данных.

*Тип*: Object

*Пример*:

```json
"config": {
    "username": "Admin",
    "password": "",
    "auth_url": "https://example.com/auth"
}
```

[comment]: # ({/e21b146a-1})

[comment]: # ({7be8b4c3-6a167d9e})

### description

Описание модуля.

*Тип*: String

*Пример*:

```json
"description": "Это виджет часов."
```

[comment]: # ({/7be8b4c3-6a167d9e})

[comment]: # ({23438afa-cb9c7cd8})

### widget

Настройка виджета. Используется, если для *[type](#type)* установлено значение *widget*.

*Тип*: Object

*Поддерживаемые ключи объекта:*

- **имя** (string) — используется в списке виджетов и в качестве заголовка по умолчанию. Если пусто, будет использоваться параметр «name» из модуля.

- **size** (object) – размеры виджета по умолчанию. Поддерживает ключи:
    - *width* (integer) — ширина виджета по умолчанию.
    - *height* (integer) — высота виджета по умолчанию.

- **form_class** (string) - класс с формой полей виджета. Должен находиться в каталоге *includes*.
    Если классом является *WidgetForm.php*, который ожидается по умолчанию, этот параметр можно опустить.
    Если вы используете другое имя, укажите его здесь.

- **js_class** (string) — имя класса JavaScript для режима просмотра виджета для расширения класса CWidget по умолчанию.
    Класс будет загружен с информационной панелью.
    Исходный файл класса должен находиться в каталоге assets/js. См. также: [assets](#assets).

- **use_time_selector** (boolean) — определяет, требует ли виджет выбора времени на панели управления.
    Поддерживаемые значения: *true*, *false* (по умолчанию).

- **refresh_rate** (integer) — частота обновления виджета в секундах (по умолчанию: 60).

*Пример*: 

```json
"widget": {
    "name": "",
    "size": {
    "width": 12,
    "height": 5
    },
    "form_class": "WidgetForm",
    "js_class": "CWidget",
    "use_time_selector": false,
    "refresh_rate": 60
}
```

[comment]: # ({/23438afa-cb9c7cd8})

[comment]: # ({1530a296-ee0f6140})

### url

Ссылка на описание модуля. Для виджетов эта ссылка откроется при нажатии на значок справки ![](../../../../assets/en/manual/web_interface/help_link.png){class="nozoom"}
в окне [*Добавить виджет*](/manual/web_interface/frontend_sections/dashboards#adding-widgets) или [*Редактировать виджет*](/manual/web_interface/frontend_sections/dashboards#widgets).
Если **url** не указан, то при нажатии на значок справки откроется общая страница [Виджеты информационной панели](/manual/web_interface/frontend_sections/dashboards/widgets).

*Тип*: String

*Пример*: 

```json
"url": "http://example.com"
```

[comment]: # ({/1530a296-ee0f6140})
