homepage.blocks.update

Scope: homepage

Кто может вызывать: Администратор портала

Меняет настройки блока на сайте в опции componentsettings. Метод не создаёт блоков, не пишет файлы и не меняет содержимое блока (файлы center_block/<code>.php / right_block/<code>.php). Для любого блока доступны active, sort, title; для локальных блоков (source = local) дополнительно rights, mobile, menu, left_menu. Для встроенных блоков допустимо только то, что даёт страница «Настроить Главную»: active, sort, title.

HTTP: POST
Побочные эффекты: изменяет данные (настройки главной указанного сайта)

Параметры метода

Параметр Тип Обяз. Описание
code string да Код блока.
zone string да Зона: center или right.
fields object да Изменяемые поля (см. таблицу ниже). Другие ключи (в том числе code, zone, render, template) отклоняются с VALIDATION_ERROR.
siteId string нет Сайт, для которого меняются настройки; по умолчанию текущий.

Поля fields

Поле Блоки Тип и границы Описание
active все bool (true/false, также Y/N, 1/0) Включить или отключить блок на сайте. Новый локальный блок из /local по умолчанию выключен: чтобы он вывелся на главной, передайте true.
sort все целое от 0 до 1000000 Порядок вывода внутри зоны (меньше - выше).
title все строка 1-255 символов, теги вырезаются Название блока (как переименование в «Настроить Главную»). Пустое после очистки значение отклоняется.
left_menu локальные, зона center, при наличии menu bool Показывать пункт в левом меню портала (тот же флаг, что «Вывести в левое меню» в «Настроить Главную», где ссылка вводится рядом с флагом и сохраняется как menu.url). Метод сам обновляет пункт меню портала: он появляется у активного блока с menu и left_menu = true и без rights, и исчезает при left_menu = false, выключении блока, сбросе menu или добавлении rights (меню портала не скрывает пункты по пользователям, поэтому у блока с rights пункта в нём нет). Без menu (в запросе или уже сохранённого) отклоняется.
rights локальные {admin: bool, groups: int[]} Кому виден блок: администраторам (admin) и/или участникам групп (groups - положительные целые). Пустое значение ("", [], null) снимает ограничение.
mobile локальные {type, url, dataMethod} Контракт мобильного приложения. type: none, webview-url (нужен url), native-json (необязательный dataMethod). url - относительный (/path) или https://...: javascript:, http: и протокол-относительные (//host) отклоняются. dataMethod - только имя REST-метода <scope>.<entity>.<action>. Пустое значение сбрасывает контракт.
menu локальные, зона center {url, title} Пункт левого меню блока. url - относительный или https://... (правила как у mobile.url), title необязателен (по умолчанию - название блока). Пустое значение удаляет пункт и сбрасывает left_menu.

Все значения проверяются до записи: при любой ошибке не сохраняется ничего.

Возвращаемые данные

  • result - обновлённый блок в формате homepage.blocks.get. Ответ строится по только что сохранённым настройкам и не проверяет права вызывающего на просмотр блока: администратор, который сам закрыл блок от своих групп через rights, получает сохранённый блок (а не ACCESS_DENIED); последующие get, list и data для него этот блок уже скрывают.
  • total, next - null.
  • error - null при успехе.

Обработка ошибок

Код Описание
UNAUTHORIZED Пользователь не авторизован
ACCESS_DENIED Нет прав администратора
NOT_FOUND Блок не найден в зоне zone (файл блока не выгружен в /local или код неверный)
VALIDATION_ERROR Не передан fields; неизвестное поле; значение вне границ (sort, длина title), неверный формат (rights, mobile, menu, небезопасный url, mobile.dataMethod не в формате REST-метода); rights/mobile/menu/left_menu у встроенного блока; menu/left_menu у блока сайдбара; left_menu без menu (error.details.field - поле)
INTERNAL_ERROR Внутренняя ошибка сервиса

Примеры кода

Пример запроса

Название, порядок и доступ только администраторам:

curl -X POST "https://{portal}/rest/{user_id}/{webhook_code}/homepage.blocks.update.json" \
          -H "Content-Type: application/json" \
          -d '{
            "code": "acme_links",
            "zone": "right",
            "fields": {"title": "Ссылки", "sort": 250, "active": true, "rights": {"admin": true, "groups": []}}
          }'
        

Пункт левого меню блока центра и мобильный контракт:

curl -X POST "https://{portal}/rest/{user_id}/{webhook_code}/homepage.blocks.update.json" \
          -H "Content-Type: application/json" \
          -d '{
            "code": "acme_memo",
            "zone": "center",
            "fields": {
              "menu": {"url": "/company/onboarding/", "title": "Памятка"},
              "left_menu": true,
              "mobile": {"type": "webview-url", "url": "/m/memo/"}
            }
          }'
        

Пример ответа

{
          "result": {
            "result": {
              "code": "acme_links",
              "zone": "right",
              "source": "local",
              "title": "Ссылки",
              "sort": 250,
              "defaultSort": 500,
              "active": true,
              "siteId": "s1",
              "rights": {"admin": true, "groups": []},
              "mobile": {"type": "none", "url": "", "dataMethod": ""},
              "menu": null,
              "left_menu": false
            },
            "next": null,
            "error": null
          },
          "total": null
        }
        

См. также

Предыдущая
Следующая