Чанки

Xcomm3x3 мин чтенияСтраница 6 из 11
На этой странице 17

Все чанки разделены на три группы:

  • Дефолтные — используют CSS-классы xcomm3x-* из встроенной темы
  • Bootstrap 5 — примеры на Bootstrap 5, без xcomm3x-* классов
  • UIKit 3 — примеры на UIKit 3, без xcomm3x-* классов

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

Дефолтные чанки

xcomm3x_comment_item

Шаблон одного комментария в треде.

Плейсхолдеры:

ПлейсхолдерОписание
[[+id]]ID комментария
[[+depth]]Глубина вложенности (0 = корневой)
[[+author_name]]Имя автора
[[+date]]Дата создания
[[+body]]HTML-содержимое (текст или «[удалено]»)
[[+vote_widget]]Виджет голосования (кнопки +/−)
[[+reply_btn]]Кнопка «Ответить» (пустая строка если недоступна)
[[+edit_btn]]Кнопка «Редактировать» (пустая строка если недоступна)
[[+delete_btn]]Кнопка «Удалить» (пустая строка если недоступна)
[[+resource_id]]ID ресурса
[[+block_key]]Ключ блока
[[+token]]Токен удаления

Обязательные data-* атрибуты (нужны JS):

  • data-xc-comment="[[+id]]" — на корневом элементе комментария
  • id=\"comment-[[+id]]\" — на корневом элементе, на него ведёт ссылка из писем
  • data-depth="[[+depth]]" — на корневом элементе
  • data-xc-edit-area="[[+id]]" — контейнер для формы редактирования
  • data-xc-reply-area="[[+id]]" — контейнер для формы ответа

xcomm3x_thread_outer

Обёртка всего треда комментариев.

Плейсхолдеры:

ПлейсхолдерОписание
[[+items]]HTML всех комментариев
[[+resource_id]]ID ресурса
[[+block_key]]Ключ блока

Обязательные data-* атрибуты:

  • data-xc-thread — на обёртке
  • data-resource-id="[[+resource_id]]" — на обёртке
  • data-block-key="[[+block_key]]" — на обёртке

xcomm3x_post_form

Форма добавления нового комментария.

Плейсхолдеры:

ПлейсхолдерОписание
[[+resource_id]]ID ресурса
[[+block_key]]Ключ блока
[[+guest_fields]]HTML полей имени/email (только для незарегистрированных)
[[+captcha_html]]HTML блока капчи

Обязательные data-* атрибуты:

  • data-xc-form — на теге <form>
  • data-resource-id="[[+resource_id]]" — на <form>
  • data-block-key="[[+block_key]]" — на <form>
  • data-xc-result — на контейнере для сообщения об успехе/ошибке
  • data-resource-id и data-block-key — также на data-xc-result

Обязательные скрытые поля:

<input type="hidden" name="action" value="Web/PostComment">
<input type="hidden" name="resource_id" value="[[+resource_id]]">
<input type="hidden" name="block_key" value="[[+block_key]]">

Honeypot-поле (защита от спама):

<input type="text" name="website" style="position:absolute;left:-9999px" tabindex="-1" autocomplete="off">

xcomm3x_guest_fields

Поля имени и email для незарегистрированных пользователей. Выводится внутри [[+guest_fields]] в форме.

Обязательные имена полей: author_name, author_email.

xcomm3x_reply_form

Форма ответа на комментарий. Загружается по AJAX при клике «Ответить».

Плейсхолдеры:

ПлейсхолдерОписание
[[+parent_id]]ID родительского комментария
[[+resource_id]]ID ресурса
[[+block_key]]Ключ блока
[[+guest_fields]]Поля для гостя
[[+captcha_html]]Капча (для ответов обычно отключена)

Обязательные data-* атрибуты:

  • data-xc-reply-form="[[+parent_id]]" — на теге <form>
  • data-xc-reply-result="[[+parent_id]]" — на контейнере для результата

Обязательные скрытые поля:

<input type="hidden" name="action" value="Web/PostComment">
<input type="hidden" name="resource_id" value="[[+resource_id]]">
<input type="hidden" name="block_key" value="[[+block_key]]">
<input type="hidden" name="parent_id" value="[[+parent_id]]">

Кнопка «Отмена» должна иметь data-xc-cancel="[[+parent_id]]".

xcomm3x_edit_form

Форма редактирования комментария. Загружается по AJAX при клике «Редактировать».

Плейсхолдеры:

ПлейсхолдерОписание
[[+id]]ID редактируемого комментария

Обязательные data-* атрибуты:

  • data-xc-edit-form="[[+id]]" — на теге <form>

Обязательные скрытые поля:

<input type="hidden" name="action" value="Web/UpdateOwnComment">
<input type="hidden" name="id" value="[[+id]]">

Кнопка «Отмена» должна иметь data-xc-edit-cancel="[[+id]]".

xcomm3x_reply_btn

Кнопка «Ответить». Выводится внутри [[+reply_btn]] в чанке комментария.

Плейсхолдеры: [[+id]], [[+resource_id]], [[+block_key]].

Обязательные data-* атрибуты:

  • data-xc-reply="[[+id]]"
  • data-resource-id="[[+resource_id]]"
  • data-block-key="[[+block_key]]"

xcomm3x_edit_btn

Кнопка «Редактировать». Выводится внутри [[+edit_btn]].

Плейсхолдеры: [[+id]].

Обязательный data-* атрибут: data-xc-edit="[[+id]]".

xcomm3x_delete_btn

Кнопка «Удалить». Выводится внутри [[+delete_btn]].

Плейсхолдеры: [[+id]], [[+token]].

Обязательные data-* атрибуты:

  • data-xc-delete="1"
  • data-id="[[+id]]"
  • data-token="[[+token]]"

xcomm3x_load_more

Кнопка «Загрузить ещё». Выводится после списка комментариев если есть следующая страница.

Плейсхолдеры: [[+cursor]], [[+cursor_date]], [[+load_more_tpl]], [[+limit]].

Обязательные data-* атрибуты:

  • data-xc-load-more-wrap — на контейнере кнопки
  • data-xc-load-more="1" — на самой кнопке
  • data-cursor="[[+cursor]]" — на кнопке
  • data-cursor-date="[[+cursor_date]]" — на кнопке
  • data-load-more-tpl="[[+load_more_tpl]]" — на кнопке; подписанное имя этого чанка, без него следующие страницы выводят кнопку по умолчанию
  • data-limit="[[+limit]]" — на кнопке; размер следующей порции, без него берётся xcomm3x.comments_per_page

xcomm3x_no_comments

Сообщение когда комментариев нет. Произвольный HTML. Атрибут data-xc-no-comments на корневом элементе позволяет убрать сообщение после первого комментария.

Примеры Bootstrap 5

ЧанкЗаменяет
xcomm3x_bs5_comment_itemxcomm3x_comment_item
xcomm3x_bs5_thread_outerxcomm3x_thread_outer
xcomm3x_bs5_post_formxcomm3x_post_form
xcomm3x_bs5_guest_fieldsxcomm3x_guest_fields
xcomm3x_bs5_reply_formxcomm3x_reply_form
xcomm3x_bs5_edit_formxcomm3x_edit_form
xcomm3x_bs5_reply_btnxcomm3x_reply_btn
xcomm3x_bs5_edit_btnxcomm3x_edit_btn
xcomm3x_bs5_delete_btnxcomm3x_delete_btn
xcomm3x_bs5_load_morexcomm3x_load_more
xcomm3x_bs5_no_commentsxcomm3x_no_comments

Примеры UIKit 3

ЧанкЗаменяет
xcomm3x_uk3_comment_itemxcomm3x_comment_item
xcomm3x_uk3_thread_outerxcomm3x_thread_outer
xcomm3x_uk3_post_formxcomm3x_post_form
xcomm3x_uk3_guest_fieldsxcomm3x_guest_fields
xcomm3x_uk3_reply_formxcomm3x_reply_form
xcomm3x_uk3_edit_formxcomm3x_edit_form
xcomm3x_uk3_reply_btnxcomm3x_reply_btn
xcomm3x_uk3_edit_btnxcomm3x_edit_btn
xcomm3x_uk3_delete_btnxcomm3x_delete_btn
xcomm3x_uk3_load_morexcomm3x_load_more
xcomm3x_uk3_no_commentsxcomm3x_no_comments

Примечания

Функциональные классы в [[+body]] и [[+vote_widget]]

Следующие классы генерируются PHP-кодом и присутствуют во всех темах — они нужны JS и не могут быть удалены:

КлассГдеНазначение
xcomm3x-textвнутри [[+body]]JS извлекает текст через .xcomm3x-text при открытии формы редактирования
xcomm3x-deletedвнутри [[+body]]Маркер удалённого комментария
xcomm3x-vote-widgetвнутри [[+vote_widget]]JS обновляет виджет через .xcomm3x-vote-widget после голосования

Создание собственной темы

Скопируй любой набор example-чанков (BS5 или UIKit3), переименуй по своему принципу, замени CSS-классы на свои, укажи новые имена в параметрах сниппетов. JS-логика работает исключительно через data-xc-* атрибуты.