Блоки плагина в карточке заявки
Обновлено
Плагин может добавить в карточку заявки свой блок — например, список товаров из корзины или ссылку на созданную сделку. Блок описывается декларативно: плагин отдаёт структуру, а приложение само её рисует. Вёрстку писать не нужно, и блок автоматически выглядит как остальной интерфейс.
Точка расширения — хук backend_request_view.
Из чего состоит блок
У блока есть заголовок, иконка и набор секций:
$params['data']['shop'] = [
'id' => 'shop',
'title' => 'Товары корзины',
'icon' => 'ShoppingCart', // имя иконки lucide
'sections' => [ /* … */ ],
];
Незнакомые типы секций пропускаются молча — старая версия приложения не сломается о блок от нового плагина.
Типы секций
status — строка состояния
['type' => 'status', 'variant' => 'success', 'text' => 'Заказ №1 создан',
'link' => ['url' => '...', 'label' => 'Открыть в Shop-Script']],
kv — пары «поле — значение»
['type' => 'kv', 'rows' => [['label' => 'Сумма', 'value' => '120,00']]],
items — список объектов с картинками
['type' => 'items', 'items' => [[
'image' => '...', 'title' => 'Кофеварка', 'subtitle' => 'Артикул',
'meta' => '1 × 120,00', 'url' => '...', 'note' => 'Товар удалён']]],
actions — кнопки
['type' => 'actions', 'actions' => [[
'id' => 'createOrder', 'label' => 'Создать заказ', 'url' => '...',
'variant' => 'default', 'confirm' => 'Точно создать заказ?']]],
Ключ confirm добавляет подтверждение перед действием.
input — поле ввода
Значение приходит в действие полем value.
Как работает кнопка
Действие получает POST с номером заявки (request_id) и идентификатором кнопки (action_id), а отвечает пересобранным блоком:
['success' => true, 'block' => /* блок целиком */]
['success' => false, 'error' => 'Текст ошибки']
Приложение подменяет блок на месте — страница не перезагружается. Поэтому в ответе нужно вернуть весь блок, а не только изменившуюся часть: так после нажатия «Создать заказ» кнопка исчезает, а на её месте появляется строка состояния со ссылкой на заказ.