Hallo, ich versuche etwas zu tun. Ich möchte die Benutzerpunkte aus dem Discourse Gamification Plugin oben auf der Website anzeigen. Wenn ein Benutzer namens Adam zum Beispiel 700 Punkte hat, wie kann ich das im Kopfbereich anzeigen? Wo sollte ich den Code platzieren?
Ich meine, ich möchte eigentlich, dass der Benutzer seine eigenen Punkte sieht.
Mit freundlichen Grüßen!
Diese Anfrage ist ausgezeichnet; ich bin ebenfalls neugierig auf die Antwort.
Ich glaube, wenn jeder Benutzer seine Beitragspunkte unter seinem Namensschild sehen könnte, würde dies das Engagement der Community erheblich steigern.
„Ich möchte die Cheer Points von den Benutzerkarten oben auf der Homepage verschieben. Der Benutzer sollte seine Punktzahl sehen können. Diese Punktzahlen stammen von der Rangliste.“
Ich möchte die Cheer Points von den Benutzerkarten oben auf der Homepage anzeigen. Der Benutzer sollte seinen Punktestand sehen können. Diese Punktestände werden von der Rangliste übernommen.
Nein, Sir. Der Nutzer sollte nur seine Punktzahl in der Kopfzeile sehen. Ich muss den Abschnitt, der der Profilkarte hinzugefügt wird, zur Kopfzeile hinzufügen. Diese Punktzahl wird von der Bestenliste bezogen, die die für Aufgaben erzielten Punkte widerspiegelt.
Jeder Benutzer sollte seinen Punktestand im Kopfbereich der Homepage sehen. Wenn es einen Code oder eine Methode dafür gibt, lassen Sie es mich bitte wissen. Ich kämpfe seit 14 Stunden und streite mich mit meiner Katze!
Es gibt viele Beispiele für Komponenten. Schauen Sie sich die Codebasen von Theme component an, um Beispiele für .gjs Glimmer-Komponenten zu sehen und wie sie an Plugin-Outlets angehängt werden.
@merefield bezog sich darauf, wie Sie diese Komponente erstellen könnten. Die Sache ist, dass dies keine Funktion ist, daher muss sie als Theme Component erstellt werden.
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer("0.8", (api) => {
api.onPageChange(() => {
const currentUser = api.getCurrentUser();
if (!currentUser) {
console.warn("Benutzer nicht angemeldet");
return;
}
fetch(`/u/${currentUser.username}.json`)
.then(response => response.json())
.then(data => {
console.log("Gamification-Daten:", data);
let score = data?.user?.gamification_score ?? 0;
// Wenn die Punktzahlbox bereits vorhanden ist, fügen Sie sie nicht erneut hinzu
if (document.querySelector("#gamification-score")) return;
// Finde den .contents-Container des Headers
let headerContents = document.querySelector(".d-header> .wrap .contents");
if (headerContents) {
// Erstelle die Punktzahlbox
let scoreContainer = document.createElement("a");
scoreContainer.id = "gamification-score";
scoreContainer.classList.add("gamification-box");
scoreContainer.href = "website";
scoreContainer.target = "_blank"; // In einem neuen Tab öffnen
// Gold-Symbol
let icon = document.createElement("span");
icon.innerText = "T";
icon.classList.add("gold-icon");
// Punktzahltext
let scoreText = document.createElement("span");
scoreText.innerText = `${score}`;
scoreText.classList.add("gold-text");
// Füge Symbol und Text zur Box hinzu
scoreContainer.appendChild(icon);
scoreContainer.appendChild(scoreText);
// Füge die Box zum Header hinzu
headerContents.appendChild(scoreContainer);
}
})
.catch(error => console.error("Fehler beim Abrufen der Gamification-Punktzahl:", error));
});
});