Как устроен компонент

Xcomm3x1 мин чтенияСтраница 11 из 11
На этой странице 4

Фронтенд

JS-файл (xcomm3x.js) читает конфигурацию из window.Xcomm3xConfigs, которую генерируют сниппеты Xcomm3x и XcommThread. В конфиге — URL коннектора и имена всех чанков для AJAX-рендеринга.

Все интерактивные элементы помечены data-xc-* атрибутами — JS работает только через них, не через CSS-классы. Это позволяет использовать любой CSS-фреймворк без изменения логики.

Основные data-xc-* атрибуты:

АтрибутГдеНазначение
data-xc-threadобёртка тредаточка монтирования; хранит data-resource-id и data-block-key
data-xc-formформа добавленияотслеживается отправка
data-xc-comment="ID"элемент комментарияидентификация для AJAX-обновления
data-xc-reply="ID"кнопка «Ответить»открывает форму ответа
data-xc-edit="ID"кнопка «Редактировать»открывает форму редактирования
data-xc-delete="1"кнопка «Удалить»инициирует удаление
data-xc-load-more="1"кнопка пагинациизагружает следующую порцию

Бэкенд

Все запросы с фронтенда идут в публичный коннектор assets/components/xcomm3x/connector.php. Коннектор проверяет CSRF-токен (сессионный, передаётся в window.Xcomm3xConfigs) и маршрутизирует запросы к процессорам.

Панель администратора использует отдельный коннектор assets/components/xcomm3x/htmx-connector.php — он доступен только авторизованным менеджерам MODX и только для HTMX/AJAX запросов.

Таблицы базы данных

ТаблицаНазначение
xcomm3x_commentкомментарии: текст, автор, статус, рейтинг, глубина, путь (для дерева)
xcomm3x_comment_voteголоса за комментарии (один голос на посетителя)
xcomm3x_publication_voteголоса за страницы
xcomm3x_mail_queueочередь email-уведомлений: статус, попытки, время отправки
xcomm3x_mail_unsubscribeотписки по email и каналу
xcomm3x_stopwordстоп-слова с режимом реакции
xcomm3x_blocked_ipзаблокированные IP и CIDR-маски

Жизненный цикл комментария

  1. Отправка — Fetch POST на connector.php?action=Web/PostComment
  2. Валидация — проверка CSRF, rate limit, IP-блокировки, стоп-слов, капчи, honeypot
  3. Сохранение — статус pending (при модерации) или approved (без модерации)
  4. Уведомления — записи в xcomm3x_mail_queue для всех подписанных каналов
  5. Рендеринг — если одобрен сразу, сервер возвращает HTML нового комментария через чанк commentTpl; JS вставляет его в тред без перезагрузки страницы