Что получает клиент
Клиент открывает одну публичную ссылку. Внешняя оболочка страницы отвечает за:
- заголовок браузера;
- фиксацию открытия;
- cookie посетителя;
- кнопку «Скачать в PDF»;
- служебную плашку VARICA внизу;
- загрузку snapshot-контента во внутренний iframe.
Содержимое КП отдаётся отдельным маршрутом /{public_token}/content. Этот маршрут не считает открытие повторно: учёт принадлежит внешней странице.
Зачем используется iframe
Шаблоны создаются пользователем и могут содержать собственные стили. Iframe изолирует CSS шаблона от обвязки VARICA и сохраняет служебную нижнюю плашку вне пользовательской верстки.
Iframe передаёт высоту своего контента наружной оболочке через nonce-bound message. Внешняя страница подстраивает область под фактическую высоту КП. Это особенно важно для длинных шаблонов и мобильного просмотра.
Snapshot и безопасность содержимого
Публичная страница берёт rendered_body из generated_pages, а не текущий HTML шаблона. У iframe выставляется CSP, разрешающая только служебный nonce-bound script высоты. Импортированный пользовательский JavaScript не должен исполняться в контенте.
Это изоляция исполнения, а не модерация дизайна. Некорректный HTML/CSS всё ещё может сломать собственную верстку КП, поэтому шаблоны нужно проверять в предпросмотре и на мобильной ширине.
Учёт открытий
Каждый запрос к публичной странице:
- находит страницу по
public_token; - увеличивает
open_count; - пишет событие
openвgenerated_page_events; - после первых 10 открытий этой страницы пытается списать оплату за открытие;
- отправляет webhook
page.opened, если в настройках организации задан URL.
Даже открытия самим менеджером считаются. Признаки уникальности сохраняются в событиях для будущей аналитики, но не меняют текущий простой счётчик.
Кнопка в плашке вызывает /{public_token}/download.pdf. Перед генерацией сервис фиксирует pdf_download и обновляет счётчики страницы. Затем WeasyPrint строит файл из snapshot-HTML с белым фоном и печатными правилами. Ссылки внутри HTML сохраняются как ссылки в результирующем PDF настолько, насколько их поддерживает HTML/WeasyPrint.
PDF — производный файл, а не новый snapshot: при следующем скачивании он строится заново.
Что проверять перед публикацией шаблона
- десктоп, планшет и мобильная ширина;
- длинные заголовки и тексты;
- таблицы с несколькими строками и статической строкой «итого»;
- прозрачные PNG на нужном фоне;
- работу кнопки PDF;
- наличие маркетинговой плашки VARICA после iframe.