Баннер статистики

:discourse2: Краткое описание Статистический баннер отображает список статистики сайта на вашей главной странице
:eyeglasses: Предпросмотр Предпросмотр в конструкторе тем Discourse
:hammer_and_wrench: Репозиторий https://github.com/discourse/discourse-stat-banner
:open_book: Новичок в темах Discourse? Руководство для начинающих по использованию тем Discourse

Установить этот компонент темы

Возможности

Вы можете создать любое количество статистических показателей для отображения. Статистика берётся со страницы /about, и вы можете выбрать из следующих вариантов:

  • темы
  • сообщения
  • активные пользователи
  • пользователи
  • лайки
  • сообщения чата
  • каналы чата
  • пользователи чата

Каждый показатель можно настроить для одного из трёх периодов времени:

  • 1 день
  • 7 дней
  • 30 дней

Помимо источника и периода, вы также можете настроить:

  • заголовок
  • ссылку (необязательно)
  • manual_value (необязательно, переопределяет автоматическое значение)

Настройки

Имя Описание
display stats Отображать статистику
banner title Заголовок баннера
show on Показывать на
background color Переменная цвета Discourse или шестнадцатеричное значение
text color Переменная цвета Discourse или шестнадцатеричное значение
min column width Минимальная ширина колонки
hide on mobile Скрывать на мобильных устройствах
plugin outlet Выход плагина, в котором отображается этот компонент. Попробуйте above-main-container или below-site-header. Дополнительные выходы можно найти в компоненте темы «Расположение выходов плагинов»
disable cache Статистика баннера будет обновляться каждый раз при его отображении. Обратите внимание, что это может создать небольшую дополнительную нагрузку на сервер.

:discourse2: Хостинг у нас? Компоненты тем доступны для использования на наших тарифах Standard, Business и Enterprise.

28 лайков

iPhone SE не подчиняется настройке hide on mobile.

Редакция: похоже, что никакие мобильные устройства не следуют этой настройке, и баннер всегда виден.

3 лайка

И небольшая просьба по UX/UI — ссылки должны выглядеть как ссылки.

3 лайка

Спасибо за быстрый ответ @Jagster! Я только что обновил это, чтобы исправить эти проблемы.

3 лайка

Привет, @awesomerobot,

Большое спасибо за этот компонент темы; я сразу же его приобрёл.

Если не возражаете, у меня к вам вопрос, так как я немного запутался. Я понимаю, что имеется в виду под «Активными пользователями», поскольку это понятно из названия, но что именно охватывает раздел «Пользователи»?

Отличный вопрос!

Активные пользователи — это пользователи, которые были замечены в течение указанного периода (1/7/30 дней), то есть заходили на сайт с авторизацией.

Пользователи — это количество новых аккаунтов, созданных в течение указанного периода (1/7/30 дней).

2 лайка

Доброе утро, @awesomerobot,

Я потратил немного времени на размышления об этом компоненте темы и, исходя из вашего ответа касательно «Пользователей» и «Активных пользователей», похоже, что информация не обновлялась недавно. Кроме того, у меня, кажется, есть два разных значения для этих метрик.

Вот моя статистика на десктопе:

А на мобильном устройстве:

Хотя разница незначительна, я не могу понять, откуда берутся эти данные.

Я попробовал реализовать обновление HTML-кода для статистики следующим образом:

<script>
  setInterval(function() {
    location.reload();
  }, 60000); // Обновление каждые 1 минуту (60000 миллисекунд)
</script>

Примечание: Код будет перезагружать страницу каждые 1 минуту (60000 миллисекунд). Вы можете изменить интервал в соответствии с вашими требованиями.

Однако я не уверен, можно ли добавить это в редактор настроек.

Любая помощь будет очень кстати.

1 лайк

Обновление:

Я пришёл к выводу, что это должно выглядеть так?

[
	{
		"setting": "display_stats",
		"value": "[{\"source\":\"posts\",\"period\":\"30_days\",\"title\":\"Сообщения\",\"link\":\"\",\"manual_value\":\"\"},{\"source\":\"likes\",\"period\":\"30_days\",\"title\":\"Лайки\",\"link\":\"\",\"manual_value\":\"\"},{\"source\":\"active_users\",\"period\":\"30_days\",\"title\":\"Активные пользователи\",\"link\":\"\",\"manual_value\":\"\"},{\"source\":\"users\",\"period\":\"30_days\",\"title\":\"Регистрации\",\"link\":\"\",\"manual_value\":\"\"}]"
	},
	{
		"setting": "banner_title",
		"value": "Статистика за последние 30 дней"
	},
	{
		"setting": "show_on",
		"value": "homepage"
	},
	{
		"setting": "background_color",
		"value": "var(--tertiary-low)"
	},
	{
		"setting": "text_color",
		"value": "var(--primary)"
	},
	{
		"setting": "min_column_width",
		"value": "10em"
	},
	{
		"setting": "hide_on_mobile",
		"value": false
	},
	{
		"setting": "plugin_outlet",
		"value": "above-main-container"
	},
	{
		"setting": "javascript",
		"value": "setInterval(function() { Discourse.__container__.lookup('controller:widget').send('refresh'); }, 3600000);"
	}
]

Однако я получаю сообщение об ошибке:

javascript: Эти настройки были добавлены. Пожалуйста, удалите их и попробуйте снова.

Статистика берётся со страницы «О нас», где используется те же данные из таблицы в нижней части этой страницы:

Данные в баннере обновляются на основе самого короткого периода статистики, начиная с момента, когда пользователь впервые увидел баннер.

Например, если баннер настроен на отображение статистики за последний день, то после первого просмотра данные в нём обновятся через 24 часа. Если баннер настроен на отображение статистики только за последний месяц, данные обновятся через месяц после первого просмотра (или если вы очистите localStorage в браузере).

Такая реализация выбрана для уменьшения количества запросов: вместо того чтобы показывать обновлённую статистику при каждом просмотре баннера, данные кэшируются в localStorage браузера.

Этот редактор предназначен только для редактирования существующих настроек; добавлять новые настройки (или код JavaScript) здесь невозможно.

Если вы хотите, чтобы баннер обновлялся чаще, я могу добавить новую настройку, которая отключит кэширование.

2 лайка

Привет, @awesomerobot

Спасибо за подробный ответ и за указание источника статистики. Однако у меня по-прежнему возникает та же проблема со статистикой, отображаемой на моем мобильном телефоне; это происходит с момента первоначальной установки.

По моему пониманию, моя статистика к настоящему моменту должна была обновиться следующим образом:

Я также пытался очистить кэш браузера, но это не дало никаких результатов.

Я был бы очень признателен, если бы эта опция была реализована, так как это обеспечило бы более полное представление о форуме для пользователей.

2 лайка

Похоже, это статистика из /admin, которая, вероятно, немного отличается от той, что на /about, но в любом случае… если вы обновите компонент, я добавил настройку для отключения кэширования:

Screenshot 2023-10-30 at 2.03.15 PM

5 лайков

Прекрасно, всё работает безупречно! Как только я активировал настройку, она сразу же обновила страницу. Этот подход гораздо проще, чем очистка кэша, ведь я всегда держу форум открытым, наряду со многими другими!

2 лайка

Есть ли способ установить период так, чтобы отображалась статистика «за всё время»?

Кроме того, было бы здорово, если бы я мог отображать общее количество «голосов», рассчитываемое этим компонентом: Topic Voting | Discourse - Civilized Discussion

Компонент запрашивает статистику из /about.json. Так что, я думаю, можно довольно легко добавить значение «за всё время», так как оно тоже доступно.

Однако, если вы захотите отображать другую статистику, вероятно, вам понадобится сделать форк и доработать компонент, чтобы он запрашивал эти значения из места, где они доступны.

2 лайка

Значит, я могу обновить это вручную в JSON-файле настроек, так как этого пункта нет в выпадающем списке?

Нет, если вы добавите запись в manual_value, это просто заменит найденное значение на статическое. Возможно, переименование этого поля в static_value лучше передаст смысл?

Вы можете получить общий счётчик за всё время, добавив в выпадающий список селектор периода «за всё время»:

Это просто небольшое изменение в файле настроек компонента. Я загрузил ветку с этими изменениями здесь: https://github.com/nolosb/discourse-stat-banner/tree/count. Однако для создания pull-запроса, вероятно, всё ещё потребуется добавить логику для переименования этой переменной в выпадающем списке?

1 лайк

Невероятно, спасибо за добавление этого!

2 лайка

Есть ли способ ограничить это конкретной категорией? Я попробовал разместить элемент выше заголовка категории и хотел хотя бы с помощью CSS ограничить его конкретной категорией, но тогда он нигде не отображается.

1 лайк

Если вы измените настройку темы show_on на everywhere, вы сможете использовать этот CSS для отображения в одной категории (замените examplecategory на соответствующий слаг вашей категории)

.stat-banner__wrapper {
  display: none;
}

body.category-examplecategory {
  .stat-banner__wrapper {
    display: block;
  }
}
1 лайк