Ist es möglich, die Leaderboard-URL irgendwie manuell zurückzusetzen?
Z.B. leaderboards/2 zu leaderboards/1.
Ist es möglich, die Leaderboard-URL irgendwie manuell zurückzusetzen?
Z.B. leaderboards/2 zu leaderboards/1.
Ist es möglich, einem Benutzer als zusätzliche Belohnung Punkte zuzuweisen? ![]()
Sie möchten vielleicht auch Folgendes sehen:
welches diese Curl-Anfrage enthält:
curl --location 'https://my.discourse.com/admin/plugins/gamification/score_events' \
--header 'Api-Key: <your key>' \
--header 'Api-Username: <your username>' \
--header 'Content-Type: application/json' \
--data '{
"user_id": "101",
"date": "2024-05-15",
"points": "-141",
"description": "Gamification point adjustment"
}'
Ich habe dieses Plugin im Admin geöffnet, aber die Registerkarte “Leaderboard” ist nicht automatisch erschienen. Ich habe auch keine neuen Bestenlisten hinzugefügt. Warum ist das so? Wo kann ich diese Bestenlisten sehen?
Ich glaube, du musst sie selbst zur Seitenleiste hinzufügen
. Die Ranglisten befinden sich unter /leaderboard, /leaderboard/2, /leaderboard/3 usw.
Ist es möglich, eine Rangliste für eine bestimmte Kategorie oder ein bestimmtes Tag zu erstellen?
Ranglisten sind an Gruppen gebunden. Sie können jedoch in den Gamification-Einstellungen festlegen, welche Kategorien alle Ranglisten beeinflussen. Es scheint eine interessante Idee zu sein, dies in die Rangliste zu verschieben, um beispielsweise hier in dieser Community eine #support-Rangliste zu haben.
2 Beiträge wurden in ein neues Thema aufgeteilt: Reduzierung von Punkten für markierte Benutzer
Gibt es eine Möglichkeit, mich von der Rangliste auszuschließen?
ja, fügen Sie sich selbst einer neuen Gruppe hinzu (nennen Sie sie „leaderboard-exclusion“ oder etwas Ähnliches) und schließen Sie diese Gruppe dann in den Plugin-Einstellungen aus.
edit: Dadurch können Sie auch ganz einfach jeden anderen ausschließen, wenn Sie dies zu einem späteren Zeitpunkt wünschen, indem Sie ihn zu derselben Gruppe hinzufügen. ![]()
Vielen Dank. Das ergibt Sinn.
Nach dem Upgrade auf Version 2026.1.0 habe ich eine monatliche Rangliste erstellt und beim Aufruf des folgenden Routings einen Fehler erhalten:
http://localhost:4200/admin/plugins/discourse-gamification/leaderboards
Der Fehler lautet wie folgt:
assert.js:40
Uncaught (in promise) Error: Assertion Failed: You attempted to update `_value` on `TrackedStorageImpl`, but it had already been used previously in the same computation. Attempting to update a value after using it in a computation can cause logical errors, infinite revalidation bugs, and performance issues, and is not supported.
`_value` was first used:
- While rendering:
{{outlet}} for -top-level
-top-level
{{outlet}} for application
application
DiscourseRoot
{{outlet}} for admin
admin
{{outlet}} for adminPlugins
admin-plugins
{{outlet}} for adminPlugins.show
show
AdminPluginConfigPage
AdminPluginConfigArea
{{outlet}} for adminPlugins.show.discourse-gamification-leaderboards
adminPlugins.show.discourse-gamification-leaderboards
{{outlet}} for adminPlugins.show.discourse-gamification-leaderboards.index
discourse-gamification-leaderboards
DPageSubheader
(result of a `unknown` helper)
Stack trace for the update:
at TrackedArray._dirtyCollection2 (array.ts:163:13)
at Object.set (array.ts:126:15)
at Proxy.sort (<anonymous>)
at AdminPluginsShowDiscourseGamificationLeaderboardsIndexController.sortedLeaderboards (index.js:23:1)
at AdminPluginsShowDiscourseGamificationLeaderboardsIndexController.<anonymous> (handle-descriptor.js:67:17)
Ich habe die fehlerhafte Datei wie folgt lokalisiert:
plugins/discourse-gamification/admin/assets/javascripts/discourse/controllers/admin-plugins/show/discourse-gamification-leaderboards/index.js
Der spezifische Code:
@discourseComputed("model.leaderboards.@each.updatedAt")
sortedLeaderboards(leaderboards) {
return (
leaderboards?.sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || [] // Zeile 22
);
}
Der Grund für den Fehler:
Assertion Error des reaktiven Zustandsmanagements von Ember.js (genauer gesagt des Glimmer-Tracking-Systems). Der Kernpunkt ist: Wenn Sie zuerst einen tracked (verfolgten) Wert in demselben Berechnungszyklus lesen und ihn dann versuchen zu ändern, verbietet Ember dies direkt, da diese „Erst verwenden, dann aktualisieren“-Operation zu logischen Fehlern, Endlosschleifen oder Leistungsproblemen führen kann.
Schlüsselproblem:
Array.sort() ändert das ursprüngliche Array direkt und aktualisiert dadurch den @tracked-Status von leaderboards.
Die Aufgabe einer berechneten Eigenschaft (sortedLeaderboards) ist es, einen neuen Wert abzuleiten, nicht den ursprünglichen Zustand zu ändern. Sie sollte selbst eine „reine Funktion“ sein (ohne Nebenwirkungen, ändert die Eingabequelle nicht).
Hier ist die Lösung zur Behebung:
@discourseComputed("model.leaderboards.@each.updatedAt")
sortedLeaderboards(leaderboards) {
return (
//leaderboards?.sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || []
leaderboards?.slice().sort((a, b) => compare(b?.updatedAt, a?.updatedAt)) || []
);
}
Screenshot nach der Korrektur:
Es scheint, dass dieses ähnliche Problem kein Einzelfall ist. Ich vermute, dass es sich um ein Inkompatibilitätsproblem handelt, das durch das Upgrade von emberjs verursacht wurde. Viele Stellen in Plugins wurden jedoch nicht synchron mit dem Upgrade geändert, da diese Arbeit nicht so einfach ist, wie es klingt.
Frage: Gibt es eine Verzögerung bei der Vergabe von Punkten? Zum Beispiel führen neue Benutzer Aktionen durch, für die Punkte vergeben werden, wie das Posten eines neuen Themas oder das Vergeben eines „Gefällt mir“, aber ihre Punktzahlen werden nicht angezeigt. Ich habe Vertrauensstufe 0 in den Einstellungen aktiviert, daher gehe ich davon aus, dass es sich nur um eine Verzögerung bei der Zuweisung der Punkte handelt? Wenn ja, wie oft wird berechnet und aktualisiert? Vielen Dank!