Фронтенд
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-маски |
Жизненный цикл комментария
- Отправка — Fetch POST на
connector.php?action=Web/PostComment - Валидация — проверка CSRF, rate limit, IP-блокировки, стоп-слов, капчи, honeypot
- Сохранение — статус
pending(при модерации) илиapproved(без модерации) - Уведомления — записи в
xcomm3x_mail_queueдля всех подписанных каналов - Рендеринг — если одобрен сразу, сервер возвращает HTML нового комментария через чанк
commentTpl; JS вставляет его в тред без перезагрузки страницы