5.0 KiB
Комментарии
Модуль comments предоставляет древовидные обсуждения, премодерацию, ответы,
редактирование владельцем и оценку комментариев. Для голосов нужен модуль
Взаимодействия, защита гостевой формы подключается через
Антиспам.
Вставка обсуждения
Для текущего документа:
[mod_comments]
Для конкретного объекта:
[mod_comments:document:145]
[mod_comments:poll:8]
Формат: [mod_comments:ТИП:КЛЮЧ]. Тип должен быть разрешён настройкой
Типы объектов. Параметр страницы комментариев называется comments_page.
Пагинация применяется к корневым веткам: выбранная страница получает корневой
комментарий вместе со всеми его ответами, а ответы соседних страниц из БД не
загружаются.
Шаблон списка
| Тег | Значение |
|---|---|
[tag:count] |
Общее число комментариев обсуждения. |
[tag:items] |
Собранное дерево комментариев либо сообщение о пустом списке. |
[tag:form] |
Форма нового комментария или предложение войти. |
[tag:notice] |
Сообщение о закрытом обсуждении. |
[tag:pagination] |
Ссылки на страницы верхнеуровневых веток. |
Шаблон комментария
| Тег | Значение |
|---|---|
[tag:id] |
ID комментария. |
[tag:parent_id] |
ID родителя, 0 для корневой записи. |
[tag:depth] |
Глубина ветки, начиная с 0. |
[tag:author] |
Экранированное имя автора. |
[tag:body] |
Подготовленный безопасный HTML текста. |
[tag:date] |
Дата дд.мм.ГГГГ ЧЧ:ММ. |
[tag:datetime] |
ISO-дата для атрибута datetime. |
[tag:status] |
Плашка премодерации либо пустая строка. |
[tag:reply] |
Кнопка ответа, если разрешена глубина. |
[tag:votes] |
Кнопки «за/против» и текущий счёт. |
[tag:edit] |
Кнопка изменения в разрешённый временной интервал. |
[tag:delete] |
Кнопка удаления владельцем. |
[tag:children] |
Уже собранные дочерние комментарии. |
Шаблон формы
| Тег | Значение |
|---|---|
[tag:guest_fields] |
Имя и email для неавторизованного посетителя. |
[tag:protection] |
Поля активного профиля антиспама comments. |
[tag:min_length] |
Минимальная длина текста. |
[tag:max_length] |
Максимальная длина текста. |
Форма должна сохранять textarea[name=body], скрытый parent_id, элементы
data-comment-form, data-comment-cancel и место статуса
data-comment-form-status, если используется штатный JavaScript.
Публичный API
GET /api/v1/comments/document/145?page=1
POST /api/v1/comments/document/145
POST /api/v1/comments/37/edit
POST /api/v1/comments/37/delete
Создание принимает body, parent_id, а для гостя author_name и
author_email; CSRF передаётся полем _csrf или заголовком X-CSRF-Token.
Ответ сообщает статус published или pending.
Создать обсуждение для отсутствующего или удалённого объекта нельзя. Антиспам проверяет содержимое формы, но не заменяет ограничение частоты: для гостя всегда действуют отдельные лимиты по actor cookie и HMAC-префиксу сети/цели. Поэтому смена cookie не создаёт неограниченный поток комментариев.
Настройка премодерации имеет режимы: без модерации, только гости, все. При
удалении документа его обсуждение закрывается. Hooks comments.creating,
created, published, updated, deleted и rendering позволяют подключать
уведомления, внешнюю модерацию и проектный HTML.