Виджеты amoCRM поддерживают добавление на страничку настроек виджета собственной программной логики – поля произвольной структуры и внешнего вида.
Поле произвольной структуры состоит из hidden input (поле, через которое осуществляется чтение и сохранение ), div -элемента, в который можно выводить DOM-элементы для взаимодействия с пользователем и некотого javascript-кода, который обеспечивает необходимую логику.
Для использования поля произвольной структуры необходимо сделать два простых шага:
Это самое обычное поле со специальным типом custom, возможно не более одного такого поля в одном виджете. Не забудьте добавить местоположение “settings” в массив locations в mainfest.json!
Важно: поле с типом “custom” может содержать json-строку либо число. Строчный тип данных на сервере сохраняться не будет.
"settings": {
"apikey": {
...
},
...,
"myfield": {
"name": "settings.apikey",
"type": "custom",
"required": false
}
}
}
Соберите виджет и загрузите его в аккаунт. Вам станет доступен div с ID <код вижета>_custom_content и hidden input с ID <код вижета>_custom.
Чтобы изменения вашего поля отражались в форме и ее кнопках, нужно создавать событие change на спрятанном системном инпуте. Вот пример того, как можно это сделать:
$( 'input[name="имя вашего поля"]' ).trigger ( 'change' ) ;
Виджеты amoCRM могут создавать свою собственную страницу в разделе “Настройки”
Для этого необходимо в списке областей подключения виджета указать область advanced_settings. На данной странице у виджета будет срабатывать callback advancedSettings.
Данная странице полностью контролируется виджетом. DOM-страницы и её структуру виджеты должны формировать сами.
Также, виджету необходимо в задать новый блок advanced в manifest.json, в котором будет храниться ключ title – наименование данной страницы.
Пример файла manifest.json
{
"widget": {
"name": "widget.name",
"description": "widget.description",
"short_description": "widget.short_description",
"code": "example_widget",
"secret_key": "e2888047a01bc97aa250118c2fa518dba57a4034ccf16dca784dca292d89324f",
"version": "1.9",
"interface_version": 2,
"init_once": false,
"locale": [
"ru"
],
"installation": true
},
"locations": [
"everywhere",
"settings",
"advanced_settings"
],
"settings": {
"login": {
"name": "settings.login",
"type": "text",
"required": false
}
},
"advanced": {
"title": "advanced.title"
}
}