Plugin de gamificación de Discourse en el encabezado

Hola, estoy intentando hacer algo. Quiero mostrar los puntos del usuario del plugin Discourse Gamification en la parte superior del sitio. Por ejemplo, si un usuario llamado Adam tiene 700 puntos, ¿cómo puedo mostrar esto en la sección del encabezado? ¿Dónde debería colocar el código?

Lo que realmente quiero es que el usuario vea sus propios puntos.
¡Saludos!

Esta solicitud es bastante excelente; también tengo curiosidad por saber la respuesta.
Creo que si cada usuario pudiera ver sus puntos de contribución debajo de su etiqueta de nombre, mejoraría enormemente la participación de la comunidad.

1 me gusta

al menos dame un ejemplo de html para calificaciones de usuarios

¿Quizás esto?

“Quiero mover los Puntos de Ánimo de las tarjetas de usuario a la parte superior de la página de inicio. El usuario debería poder ver su puntuación. Estas puntuaciones se obtienen de la tabla de clasificación”.

Esto también es compatible justo debajo del encabezado y la ruta del tema

Pero es posible que necesites crear el componente tú mismo.

Quiero mover los Puntos de Ánimo de las tarjetas de usuario a la parte superior de la página principal. El usuario debería poder ver su puntuación. Estas puntuaciones se obtienen de la tabla de clasificación.

¿La ubicación de este elemento de banner/encabezado sería por mes, trimestre, día, semana, año o todo el tiempo?

Aquí está la API de encabezado actual:

Pero probablemente solo quieras adjuntar un Componente a un outlet

before-header-panel parece una buena opción.

1 me gusta

La imagen muestra la pantalla de un teléfono inteligente con una aplicación de calculadora abierta, que muestra el número "100", e iconos de voz y búsqueda. (Subtitulado por IA)

No, señor. El usuario solo debe ver su puntuación en la cabecera. Necesito añadir a la cabecera la sección que se añade a la tarjeta de perfil. Esta puntuación se obtiene de la tabla de clasificación, que refleja los puntos obtenidos por la tarea.

Se basará en los puntos totales obtenidos a lo largo del tiempo.

Cada usuario debería ver su puntuación en la sección de encabezado de la página de inicio. Si hay algún código o método para hacer esto, por favor házmelo saber. He estado luchando durante 14 horas, ¡y estoy peleando con mi gato! :smiley:

Hay muchísimos ejemplos de Componentes. Mira las bases de código de Theme component para ver ejemplos de Componentes Glimmer .gjs y observa cómo se adjuntan a los Plugin Outlets.

@merefield se refería a cómo podrías construir este componente. El caso es que esto no es una característica, por lo que tendrá que hacerse como un Componente Temático.

1 me gusta

Lo siento. Pensé que no me entendías porque mi inglés era malo. Me sentí mal.

2 Me gusta

3a
el trabajo está hecho

4 Me gusta

¿Te importaría compartir cómo lograste esto?

Creé un nuevo componente. Usé la API para los puntos. Moví la sección de usuario a la página de inicio.

Es un método temporal pero útil. Quizás quieran mejorarlo, dejo el código aquí

Sitio web de prueba: 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("Usuario no conectado");
            return;
        }

        fetch(`/u/${currentUser.username}.json`)
            .then(response => response.json())
            .then(data => {
                console.log("Datos de Gamificación:", data);
                let score = data?.user?.gamification_score ?? 0;

                // Si la caja de puntuación ya existe, no la agregues de nuevo
                if (document.querySelector("#gamification-score")) return;

                // Encuentra el contenedor .contents de la cabecera
                let headerContents = document.querySelector(".d-header>.wrap .contents");
                if (headerContents) {
                    // Crea el contenedor de puntuación
                    let scoreContainer = document.createElement("a");
                    scoreContainer.id = "gamification-score";
                    scoreContainer.classList.add("gamification-box");
                    scoreContainer.href = "website";
                    scoreContainer.target = "_blank"; // Abrir en una nueva pestaña

                    // Icono de oro
                    let icon = document.createElement("span");
                    icon.innerText = "T";
                    icon.classList.add("gold-icon");

                    // Texto de puntuación
                    let scoreText = document.createElement("span");
                    scoreText.innerText = `${score}`;
                    scoreText.classList.add("gold-text");

                    // Agrega el icono y el texto a la caja
                    scoreContainer.appendChild(icon);
                    scoreContainer.appendChild(scoreText);

                    // Agrega la caja a la cabecera
                    headerContents.appendChild(scoreContainer);
                }
            })
            .catch(error => console.error("Error al obtener la puntuación de gamificación:", error));
    });
});
4 Me gusta

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.