Кастомна інтеграція Quill у CMS: формати, завантаження, Delta

Штатний редактор у CMS часто втрачає форматування та ламає верстку матеріалів. Ми проєктуємо та впроваджуємо кастомну інтеграцію редактора під ключ: налаштовуємо формати, завантаження та зберігання контенту так, щоб редакція працювала без втрат. У результаті публікація матеріалів пришвидшується, а структура даних залишається передбачуваною.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Кастомна інтеграція Quill у CMS: формати, завантаження, Delta
Середній
від 1 дня до 3 днів
Часті запитання

Чому штатний Quill-редактор у CMS ламає контент

Штатний Quill-редактор у CMS ламається передбачувано: контент-менеджер вставляє текст із Word, зберігає — і на сторінці зникають заголовки, злипаються абзаци, а таблиця перетворюється на набір рядків.

Причина не в редакторі, а в тому, що між полем введення та сховищем немає шару, який приводить розмітку до єдиного вигляду. Quill віддає вміст у форматі Delta — плоскому списку операцій вставлення та форматування, — а CMS чекає HTML.

Якщо перетворення роблять «на око», кожен нестандартний випадок втрачає форматування при збереженні.

Найдорожче обходиться вставлення з Word у редактор. Word приносить інлайнові стилі, вкладені <span>, невидимі символи та власні класи.

Штатний обробник вставлення частину вирізає, частину пропускає як є — і в базу йде розмітка, яку потім не відрендерити однаково в браузері та в мобільному застосунку. Таблиці рвуться на окремі абзаци, списки втрачають вкладеність, посилання залишаються з параметрами відстеження.

Окрема стаття втрат — SEO-розмітка. Заголовки рівнів підмінюються жирним текстом, <h2> і <h3> зникають зі структури, зображення приходять без alt і з вихідними іменами файлів.

Пошуковик бачить плоску сторінку без ієрархії, а редактор контенту для сайту перетворюється на джерело ручної правки після кожної публікації. Проблеми кастомного редактора тут не в інтерфейсі — у відсутності валідації на вході та нормалізації на виході.

Ми розбираємо, як це закривається: схема зберігання, правила перетворення Delta в HTML і назад, завантаження медіа та захист від «брудної» вставки.

Що дає кастомна інтеграція редактора: формати та завантаження

Структура документа замість «сирого» HTML

Штатна вставка зображень у редактор віддає <img> з абсолютною адресою та інлайновими стилями — при зміні домену або CDN половина матеріалів «сліпне», а верстка пливе на іншому шаблоні.

Кастомні формати quill описуються як окремі вузли моделі документа, тому заголовок, врізка або таблиця залишаються типізованими блоками, а не набором тегів. На виході — передбачувана верстка на будь-якому шаблоні та коректне перенесення матеріалу між розділами CMS.

Завантаження медіа без «важких» сторінок

Завантаження зображень у редактор іде через власний обробник: файл вирушає на сервер, перевіряється за типом і розміром, стискається та отримує кілька розмірів під різні блоки сторінки. Редактор вставляє готовий об'єкт із набором варіантів, а не оригінал на десяток мегабайт.

Сторінка віддає потрібний розмір під конкретне місце — час завантаження та вага сторінки перестають залежати від того, хто і як завантажив картинку.

Формат Delta як єдине джерело

Формат delta зберігає документ як послідовність операцій, а не як готову розмітку. Це дає дві речі: повну історію правок із можливістю відкату та однаковий результат при виведенні у веб, лист або мобільний застосунок.

Зберігання контенту зводиться до однієї структури — рендер у HTML, plain text або PDF збирається на стороні сервісу, без ручного дублювання.

Інтеграція редактора з CMS

Інтеграція редактора з CMS будується так, що редактор — це поле введення, а вся логіка форматів, завантаження та валідації живе в сервісі. Зміна шаблону або фронтенд-фреймворку не ламає вже збережені матеріали: структура документа залишається незмінною.

Варіант Коли підходить Обмеження
Готовий плагін з маркетплейсу Простий текст, один шаблон виведення Свої формати та медіа-логіку не розширити
Редактор «як є» + ручний HTML Разові лендінги Верстка ламається при зміні шаблону, правки не відстежуються
Кастомна інтеграція з Delta Мультишаблонне виведення, історія правок, медіа Потребує сервісного шару та підтримки

Quill обрано як основу: його модель документа розширюється без переписування ядра, а формат зберігання не прив'язаний до конкретного шаблону виведення.

Етапи впровадження кастомного редактора в CMS

Впровадження редактора в CMS — це не заміна одного поля на інше, а робота з форматом зберігання контенту, завантаженням медіа та правами доступу. Нижче — як ми ведемо таке завдання, щоб після здачі редактор не довелося переписувати.

  1. Аудит редактора. Дивимося, що стоїть зараз, у якому вигляді зберігається розмітка (HTML, Delta, власний формат), які поля та шаблони її читають. Фіксуємо, де контент втрачає структуру при збереженні та повторному відкритті.
  2. Проєктування схеми. Визначаємо, що редактор віддає назовні та що приймає назад, як конвертуються старі записи, де проходить межа між збережуваним і відображуваним представленням. Схема узгоджується до коду — інакше міграція перетворюється на переписування.
  3. Налаштування форматів. Збираємо панель під реальні завдання: заголовки, списки, таблиці, вставки коду, посилання. Зайві кнопки прибираємо — кожна зайва тягне за собою правило очищення при вставці із зовнішніх джерел.
  4. Налаштування завантаження медіа. Зображення та файли йдуть через власний обробник: перевірка типу й розміру, перейменування, прив'язка до запису. Окремо перевіряємо вставку з буфера та перетягування — це найчастіші джерела «битих» шляхів.
  5. Перевірка форматів. Прогоняємо контент по колу: створення, збереження, повторне відкриття, правка, публікація. Звіряємо, що розмітка не накопичує сміття після кількох циклів редагування.
  6. Перенесення старих записів. Конвертуємо наявний контент і перевіряємо вибіркою: де структура не відновилася — правимо правила, а не окремі записи вручну.
  7. Передача документації. Віддаємо опис формату, схему конвертації, налаштування завантажувача та інструкцію для редакторів контенту. Далі команда замовника веде редактор сама.

Кожен етап закінчується перевірюваним результатом: схема, працюючий завантажувач, прогнаний контент. Опишіть вашу CMS і поточний редактор — повернемося з оцінкою та планом за цими кроками.

Чим відрізняється Delta-формат від HTML при зберіганні контенту?

Delta-формат зберігає документ як послідовність операцій: «вставити текст», «зберегти атрибут», «видалити діапазон».

Це не розмітка, а журнал змін — редактор і CMS працюють з однією й тією самою структурою документа, тому при завантаженні в quill редактор не потрібно розбирати HTML назад у модель.

HTML-зберігання контенту влаштоване інакше: у базі лежить готова розмітка, і редактор при відкритті розбирає її своїм парсером, втрачаючи те, що не описано в його схемі.

Різниця проявляється на операціях, де важлива точність. Delta фіксує позицію та довжину вставки, тому спільне редагування й скасування дій працюють передбачувано: дві правки не конфліктують через різний порядок тегів.

При HTML-зберіганні контенту такі конфлікти доводиться вирішувати порівнянням дерев, а вкладені списки, таблиці та кастомні блоки після серіалізації часто змінюють структуру.

Порівняння форматів тут не про «краще чи гірше», а про те, хто відповідає за цілісність — редактор чи база.

У Delta є ціна. Формат нечитабельний очима: щоб побачити текст, потрібен рендерер, а пошук по ньому в базі вимагає окремого індексу. HTML можна віддати напряму в шаблон, відфільтрувати санітайзером і покласти в кеш — для простої редакції це дешевше в підтримці.

Тому вибір залежить від сценарію: якщо контент правлять кілька авторів одночасно або потрібні точні відкати, структура документа в Delta окупається; якщо публікації рідкісні й важлива швидкість видачі, HTML простіше.

На практиці ми частіше робимо гібрид: Delta як джерело правди для редактора й CMS, а HTML — як похідний шар, який перезбирається при збереженні та віддається відвідувачам.

Так редактор і CMS не розходяться в представленні документа, а фронтенд отримує готову розмітку без рендера на льоту.

Кейс: як ми усунули втрати форматування в редакторі

Редакція клієнта — інтернет-магазин з каталогом на кілька тисяч карток — працювала у стандартній збірці редактора всередині CMS.

Під час вставлення тексту з Word і Google Docs губилися списки, таблиці та вкладені заголовки: розмітка «схлопувалася» в один абзац, а збереження великої статті з десятком зображень займало до хвилини й іноді падало з помилкою.

Контент-менеджери перевіряли кожну публікацію вручну, а частина матеріалів ішла на повторне редагування вже після виходу на сайт.

Що змінили

Ми розібрали ланцюжок від введення до запису в базу й знайшли два вузькі місця. Перше — редактор віддавав розмітку у власному внутрішньому форматі, а конвертація в HTML відбувалася на стороні сервера «на льоту», через що частина вузлів губилася. Друге — зображення завантажувалися синхронно, блокуючи інтерфейс до завершення запису файлу.

Ми перевели зберігання на канонічний формат розмітки самого редактора: він зберігається в базу як є, а HTML збирається з нього детерміновано — той самий документ завжди дає той самий результат.

Завантаження зображень винесли в окремий потік із постановкою в чергу та попереднім переглядом: автор бачить картинку одразу, а запис іде фоном.

Додатково закрили вставлення із зовнішніх джерел — очищення розмітки тепер зберігає списки, таблиці та заголовки, відкидаючи лише сміттєві стилі.

Метрики до і після

Показник До Після
Частка публікацій із втратою форматування ~30% менше 1%
Середній час збереження статті із зображеннями до 60 сек 3-5 сек
Ручні правки після публікації 2-3 на матеріал поодинокі випадки
Повторне вставлення тексту з Word вимагало чищення вручну проходить автоматично

Окремо відзначимо ефект на редакцію: час на підготовку матеріалу скоротився приблизно вдвічі, бо зникла обов'язкова вичитка розмітки. Контент-менеджери перестали тримати в голові «правила безпечного вставлення» — редактор сам приводить вставлений фрагмент до коректного вигляду.

Quill ми обрали як основу саме через передбачувану модель документа: розмітка описується деревом операцій, а не рядком HTML, тому її можна надійно порівнювати, зберігати та відновлювати. Це й дало ту саму збереженість контенту, якої не бракувало на старій збірці.

Сумніви перед впровадженням: сумісність, міграція, відкат

Найчастіше технічне питання — що буде з уже накопиченим контентом. Quill зберігає розмітку не в HTML, а в Delta: плоскому списку операцій вставки та форматування.

Під час міграції ми конвертуємо старі матеріали в Delta і назад, проганяючи кожен документ через перевірку на втрату форматування — таблиці, вкладені списки та кастомні блоки переносяться окремим правилом, а не «на око». Сумісність редактора з поточною CMS перевіряється на копії бази до правок у проді.

Що як знадобиться відкат? Конфігурація редактора та правила конвертації лежать у системі контролю версій, тому повернення до попереднього стану — це перемикання на минулий збірку, а не ручна правка. Як бути з доступами?

Ролі на читання, редагування та публікацію розводяться на рівні CMS: автор бачить лише свої документи, редактор — чергу на погодження, адміністратор — історію змін.

Чи зламається поточна верстка після підключення редактора?

Ні. Редактор підключається як окремий модуль з ізольованими стилями, тому теми та шаблони сайту не зачіпаються. Ми проганяємо регрес на типових сторінках і звіряємо розмітку до та після — розбіжності видно до викочування в прод.

На руки після впровадження команда передає:

  • конфігурацію редактора з описом панелі інструментів і правил форматування;
  • схему конвертації Delta ↔ HTML з прикладами складних документів;
  • політику ролей і доступів, прив'язану до груп у CMS;
  • скрипти міграції контенту та звіти про перевірку перенесення;
  • регламент відкату з точками повернення на кожному етапі;
  • документацію по редактору: підключення, розширення, типові помилки.

Опишіть вашу задачу — який контент уже накопичено, яка CMS використовується і які ролі потрібні. Повернемося з оцінкою та планом впровадження.

Терміни впровадження кастомного редактора: етапи та орієнтири

Терміни залежать не від самого редактора, а від того, скільки форматів, інтеграцій і сценаріїв вставки потрібно закрити. Нижче — орієнтири для типового проєкту: кастомний редактор на базі Quill, вбудований у CMS, із завантаженням файлів і зберіганням контенту у Delta-форматі.

Діапазон за етапами — від трьох до семи тижнів на один редактор. Розкид визначається числом нестандартних сценаріїв: вставка з таблиць і документів, спільне редагування, версіонування, обмеження за ролями. Кожен такий сценарій додає окрему гілку перевірок і помітно зсуває термін.

Етапи йдуть не строго послідовно. Прототип і опрацювання зберігання часто перетинаються: поки налаштовуються схеми, вже зрозуміло, у якому вигляді контент ляже в базу.

Це скорочує загальний графік, але вимагає, щоб рішення щодо формату зберігання ухвалювалися на першому тижні, а не в кінці.

Орієнтири вище — для команди, яка вже працювала з Delta-форматом і кастомними збірками. Якщо контент переноситься зі старого редактора, додається етап міграції: розбір розмітки, конвертація, перевірка на вибірці сторінок.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060