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.
“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”.
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.
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.
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!
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.
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));
});
});