Динамические блоки показывают не текст, вбитый руками, а данные, которые считает небольшая программа. Программа берёт цифры из ваших систем — склада, CRM, бухгалтерии, внешнего сервиса — и возвращает готовый результат: таблицу, плитки с показателями, график или текст. На странице всегда свежие данные, а не вчерашняя сводка.
Какие блоки умеют считать данные
Живыми данными могут наполняться семь типов блоков: chart (график), script (готовый текст), form (форма), table (таблица), kpi (плитки с показателями), feed (лента записей) и list (список). Во всех случаях видно одно и то же: блок с данными и под ним отметку о свежести.
Что получает скрипт
Программа не работает вслепую: сервер передаёт ей сведения о том, где она запущена и для кого. На вход приходит один небольшой набор данных: адрес и заголовок страницы, значения переменных, номер и тип блока, нажатое действие (если это был скрипт-действие), кто смотрит страницу и текущее время. Так один скрипт может вести себя по-разному на разных адресах и показывать разные данные разным людям.
Что возвращает скрипт
Ответ зависит от блока. Для текстового блока — готовый текст. Для таблицы, списка, ленты или плиток — набор данных. Для графика — данные и настройки. Для действия — то, что должно произойти на экране: сообщение, обновление блоков, переход или скачивание файла.
{ "toast": { "message": "Подписка оформлена", "tone": "success" },
"refresh": true }
Окружение для скриптов создаётся само
Отдельно ставить Python (язык, на котором пишут расчётные скрипты) не нужно — он есть в образе портала. При первом запуске любого динамического блока портал сам готовит для него окружение и складывает его в томе данных. Если скрипту нужны дополнительные библиотеки, агент записывает их в файл requirements.txt и одной командой ставит — вручную ничего набирать не нужно. Подробнее — в разделе Скрипты и зависимости.
Пределы и защита от зависаний
- На расчёт содержимого даётся до 60 секунд: если дольше, портал останавливает скрипт и показывает понятную ошибку вместо вечной загрузки.
- На выполнение действия даётся до 120 секунд.
- Одновременно считаются четыре скрипта — остальные ждут своей очереди. Сервер не перегружается, даже если много читателей сразу открыли страницу с динамикой.
- Данные, которые скрипт получает на вход, ограничены 64 килобайтами — этого с запасом хватает для обычных форм и запросов.
Временное хранение результата
Не всегда разумно тревожить источник данных при каждом просмотре. Для этого у блока можно задать срок хранения результата — от нуля до 86 400 секунд (целых суток). Например, при сроке 300 секунд данные будут пересчитываться не чаще, чем раз в пять минут, а между этим показываться уже готовый результат. Если скрипт поправили, портал заметит изменение файла и посчитает заново, не дожидаясь срока.
Свежесть данных под блоком
Под каждым динамическим блоком видно, когда данные обновились — например, Обновлено в 14:02, — и есть кнопка со значком обновления. Нажатие пересчитывает блок тут же, не перезагружая страницу. Данные обновляются и сами: когда пришла правка страницы от агента, когда сменилось значение переменной и когда сработало действие с ответом «обновить».
Ошибки понятны и не ломают страницу
Если что-то пошло не так, читатель видит понятное сообщение, а не пустой блок:
- скрипт не найден — файл, на который ссылается блок, отсутствует;
- не тот формат ответа — скрипт вернул данные, которые блок не умеет показать;
- истекло время — расчёт не уложился в отведённые секунды;
- Python недоступен — не удалось подготовить окружение; в сообщении сказано, что проверить.
У действий ошибка мягче: скрипт сам формулирует текст вроде «укажите корректную почту», и читатель видит именно его. Подробные технические записи показываются только агенту — читателям они ни к чему.
Про безопасность
Расчётные скрипты пишет управляющий агент — и только через защищённый ключом адрес управления. Это доверенный контент: скрипт выполняется на вашем сервере от имени самого портала, как и страницы. Поэтому доступ к управляющему адресу нужно держать в тайне и никому его не передавать. Подробнее — в разделе Управление агентом.
Дальше: где лежат скрипты и как ставить библиотеки — в разделе Скрипты и зависимости; как рисуются графики — в разделе Графики; как устроены формы — в разделе Формы.