Но, думаю, есть более эффективные способы сделать это. Также я планирую отображать значки пользователей и т. д. Кто-нибудь может помочь с этим? Спасибо.
<script type="text/discourse-plugin" version="0.1">
api.onPageChange(() => {
// Проверить, существует ли элемент с ID 'topic'
if ($('#topic').length > 0) {
// Если элемент 'topic' существует, найти атрибут 'data-user-id'
var userId = $('#topic article').data('user-id');
// Проверить, существует ли атрибут 'data-user-id'
if (userId !== undefined) {
// Выполнить API-запрос для получения информации о пользователе
apiReq(`admin/users/${userId}.json`, 'GET')
.then(data => {
// Обработать данные ответа
console.log('Количество постов пользователя:', data.post_count);
// Проверить, есть ли значение в user_fields["1"]
if (data.user_fields && data.user_fields["1"]) {
// Отобразить поле пользователя внутри первого div с классом 'names'
displayUserField(data.user_fields["1"]);
}
// Отобразить количество постов внутри первого div с классом 'names'
displayPostCount(data.post_count);
})
.catch(error => {
// Обработать ошибки
console.error('Ошибка API-запроса:', error);
});
} else {
console.log('Атрибут data-user-id не найден');
}
} else {
console.log('Элемент с ID "topic" не найден');
}
});
// Функция для отображения поля пользователя внутри первого div с классом 'names'
function displayUserField(userFieldValue) {
// Найти первый div с классом 'names'
var firstNamesDiv = $('.names:first');
// Создать элемент span с классом 'user-title'
var userFieldSpan = $('<span></span>').addClass('user-title');
userFieldSpan.text(userFieldValue);
// Добавить элемент span в первый div с классом 'names'
firstNamesDiv.append(userFieldSpan);
}
// Функция для отображения количества постов внутри первого div с классом 'names'
function displayPostCount(postCount) {
// Найти первый div с классом 'names'
var firstNamesDiv = $('.names:first');
// Создать элемент span с классом 'user-title'
var postCountSpan = $('<span></span>').addClass('user-title');
postCountSpan.text(postCount + ' постов');
// Добавить элемент span с количеством постов в первый div с классом 'names'
firstNamesDiv.append(postCountSpan);
}
</script>
Функция apiReq у меня находится в другом компоненте
Чтобы получить значение post_count при просмотре поста или карточки пользователя, необходимо сериализовать данные, включив это поле. Это возможно только с помощью плагина, а полагаться на запросы для каждого пользователя — нереальное решение.
Попробуйте. Часть на JS находится в папке assets, если захотите посмотреть.
Одна конкретная вещь, которую вы могли упустить при использовании API, — это возможность кастомизации через outlets.
Дайте знать, если нужны дополнительные варианты.
Не знаю, стоит ли выпускать этот плагин, так как он небольшой, но всё же вот он:
Спасибо большое за усилия. Я попробую.
Мой первоначальный план заключался в реализации следующих функций:
Отображение количества публикаций пользователя в постах и комментариях рядом с аватаром.
Назначение заголовка по умолчанию всем участникам группы (например, «Администратор»).
Отображение уровня доверия рядом с аватаром.
Отображение значка рядом с аватаром.
Отображение значения пользовательского поля рядом с аватаром.
При этом настройки должны быть изменяемыми администратором.
Я также планировал сделать количество публикаций кликабельной ссылкой, чтобы другие могли увидеть список публикаций.
Хотя это небольшой плагин, я считаю, что его стоит опубликовать. Вы можете рассмотреть возможность добавления новых функций, как было предложено.
Спасибо.
Созданные темы — это ещё одна статистика. Хотите добавить этот счётчик к количеству сообщений или добавить новый текст, чтобы у вас было «темы: xx, сообщения: yy»?
Я пытаюсь получить что-то вроде postCount + TopicCount — просто хочу считать темы как посты. Также пытаюсь отображать это после заголовка пользователя (если он есть). Я пробовал модифицировать код плагина (после форка), но пока безрезультатно.
Я не могу редактировать, поэтому я просто установил и протестировал плагин, и он работает очень хорошо. За исключением мобильных устройств, где общее количество сообщений отображается слева от имени.