Существует довольно много вариантов добавить систему комментариев на статичный сайт. Погуглив нашел несколько:
- Disqus - наверное самая известная и распространенная платформа. Discus я отмел, т.к. не планирую покупать подписку и не хочу заставлять читателей смотреть рекламу.
- Remark42 - opensource платформа для самохостинга. Много возможностей и функций, импорт из Wordpress и Disqus. Возможно это лучший выбор если вы не против администрировать ещё +1 систему, но для моего мини-блога это излишество.
- Utterances - простой виджет, добавляет комментарии используя issues GitHub-а и это мой выбор на данный момент. Из минусов: не поддерживает локализацию, пользователям для комментирования надо регистрироваться на GitHub.
Как установить
Всё очень просто, документация по виджету занимает одну страницу.
Что необходимо сделать:
Создать на GitHub публичный репозиторий для вашего блога или сайта
Разрешить доступ приложению utterances к issue репозитория
Добавить код в нужное место на странице сайта:
<script src="https://utteranc.es/client.js" repo="[ENTER REPO HERE]" issue-term="title" label="comment" theme="github-light" crossorigin="anonymous" async> </script>- repo - имя репозитория в формате <ваш логин>/<имя репозитория>
- issue-term - способ маппинга страниц сайта и issue. Может быть:
- pathname
- url
- title
- og:title
- любая строка по которой система будет искать issue
- issue-number - вместо issue-term можно указать номер конкретного issue
- label - необязательный параметр, позволяет устанавливать метки создаваемым issue. Метка должна существовать в вашем проекте.
- theme - тема виджета. Может быть:
- github-light
- github-dark
- referred-color-scheme
- github-dark-orange
- icy-dark
- dark-blue
- photon-dark
- boxy-light
- gruvbox-dark
Если нужного issue еще нет - бот utterances автоматически его создаст при добавлении первого комментария.
Комментарии в блоге Hugo & PaperTheme
В config.yml включаем комментарии:
[params]
...
comments: true
...
Создаем файл layouts/partials/comments.html:
<script src="https://utteranc.es/client.js"
repo="[ENTER REPO HERE]"
issue-term="title"
theme="github-light"
crossorigin="anonymous"
async>
</script>
Автоматическое переключение темы виджета
В моем блоге тема PaperMod поддерживает переключение между темным и светлым режимом. Можете понажимать иконку луны и солнца в заголовке блога если еще не делали этого.
Хотелось бы сделать и переключение темы виджета чтобы он лучше вписывался в общий вид.
Меняем layouts/partials/comments.html на следующий код:
<div class="comments"></div>
<script>
// функция вставляет в div.comments элемент script
// с нужными атрибутами и указанной темой
function addComments(theme){
let s = document.createElement('script');
s.src = 'https://utteranc.es/client.js';
s.setAttribute('id', 'comments-script');
s.setAttribute('repo', 'coyotle/minimal-blog');
s.setAttribute('issue-term', 'title');
s.setAttribute('theme', theme);
s.setAttribute('label', 'comment');
s.setAttribute('crossorigin', 'anonymous');
s.setAttribute('async', '');
document.querySelector('div.comments').innerHTML = '';
document.querySelector('div.comments').appendChild(s);
}
// добавляем слушателя событий click для элемента переключения
// режима theme-toggle и пересоздаем виджет с нужной темой
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
addComments('github-light');
} else {
addComments('github-dark');
}
})
// определяем текущий режим и добавляем виджет при первой загрузке страницы
let theme = document.body.className.includes("dark") ? 'github-dark' : 'github-light';
addComments(theme);
</script>