Плагин геймификации Discourse в заголовке

Здравствуйте! Я пытаюсь решить одну задачу. Хочу отображать очки пользователя из плагина Discourse Gamification в верхней части сайта. Например, если у пользователя по имени Адам 700 очков, как можно показать это в заголовке? Где следует разместить код?

Имею в виду, что мне действительно нужно, чтобы пользователь видел свои собственные очки.
С наилучшими пожеланиями!

Этот запрос просто замечательный; мне тоже интересно узнать ответ.
Я считаю, что если бы каждый пользователь мог видеть свои очки вклада под своим именем, это значительно повысило бы вовлеченность сообщества.

хотя бы приведите пример HTML для рейтинга пользователей

Может быть, это?

«Я хочу переместить очки Cheer с карточек пользователей наверх главной страницы. Пользователь должен видеть свой счёт. Эти счёты берутся из таблицы лидеров.»

Это поддерживает область чуть ниже заголовка, а также маршрут темы.

Однако, возможно, вам придётся создать компонент самостоятельно.

Я хочу переместить очки Cheer с карточек пользователей наверх главной страницы. Пользователь должен видеть свой счёт. Эти счёты берутся из таблицы лидеров.

Будет ли размещение этого баннера/заголовка определяться по месяцу, кварталу, дню, неделе, году или за всё время?

Вот текущий API заголовка:

Но, скорее всего, вам просто нужно подключить компонент к слоту.

before-header-panel выглядит как подходящий вариант.

На изображении показан экран смартфона с открытым приложением калькулятора, отображающим число «100», и иконками для речи и поиска. (Подписи сгенерированы ИИ)

Нет, сэр. Пользователь должен видеть свой счёт только в заголовке. Мне нужно добавить в заголовок раздел, который добавляется к карточке профиля. Этот счёт получен из таблицы лидеров и отражает баллы, заработанные за выполнение задач.

Это будет основано на общем количестве очков, набранных за всё время.

Каждый пользователь должен видеть свой счёт в заголовке на главной странице. Если есть код или метод для этого, пожалуйста, сообщите. Я уже 14 часов ломаю голову и сражаюсь со своей кошкой! :smiley:

Существует множество примеров компонентов. Изучите репозитории #theme-component, чтобы увидеть примеры компонентов Glimmer с расширением .gjs и обратите внимание, как они прикрепляются к плагинам-контейнерам (Plugin Outlets).

@merefield имел в виду, как можно было бы создать этот компонент. Дело в том, что это не функция, поэтому его придется реализовать как компонент темы.

Мне очень жаль. Я подумал, что вы меня не поняли, потому что мой английский был плохим. Мне было неловко.

3a
Работа выполнена

Не могли бы вы поделиться, как вам это удалось?

Я создал новый компонент. Я использовал API для баллов. Я переместил раздел пользователя на главную страницу

Это временный, но полезный метод. Возможно, они захотят его улучшить, я оставляю код здесь.

Тестовый сайт: https://trgala.com

Js

import { apiInitializer } from "discourse/lib/api";

export default apiInitializer("0.8", (api) => {
    api.onPageChange(() => {
        const currentUser = api.getCurrentUser();
        if (!currentUser) {
            console.warn("Пользователь не авторизован");
            return;
        }

        fetch(`/u/${currentUser.username}.json`)
            .then(response => response.json())
            .then(data => {
                console.log("Данные геймификации:", data);
                let score = data?.user?.gamification_score ?? 0;

                // Если блок с очками уже существует, не добавлять его повторно
                if (document.querySelector("#gamification-score")) return;

                // Найти контейнер .contents заголовка
                let headerContents = document.querySelector(".d-header>wrap .contents");
                if (headerContents) {
                    // Создать блок с очками
                    let scoreContainer = document.createElement("a");
                    scoreContainer.id = "gamification-score";
                    scoreContainer.classList.add("gamification-box");
                    scoreContainer.href = "website";
                    scoreContainer.target = "_blank"; // Открыть в новой вкладке

                    // Золотая иконка
                    let icon = document.createElement("span");
                    icon.innerText = "T";
                    icon.classList.add("gold-icon");

                    // Текст с очками
                    let scoreText = document.createElement("span");
                    scoreText.innerText = `${score}`;
                    scoreText.classList.add("gold-text");

                    // Добавить иконку и текст в блок
                    scoreContainer.appendChild(icon);
                    scoreContainer.appendChild(scoreText);

                    // Добавить блок в заголовок
                    headerContents.appendChild(scoreContainer);
                }
            })
            .catch(error => console.error("Ошибка при получении очков геймификации:", error));
    });
});