Zeige benutzerdefiniertes HTML im Header für Mitglieder einer bestimmten Gruppe

Hallo Discourse-Familie! Ich hoffe, es gibt eine einfache Lösung dafür! Ich habe das Gefühl, die Antwort lautet, dass ich etwas JavaScript verwenden muss.

Wir haben 4 Schaltflächen im Abschnitt „Nach der Kopfzeile" unserer Admin-CSS/HTML-Einstellungen.

Wir möchten, dass einige Schaltflächen nur für Mitglieder bestimmter Gruppen sichtbar sind, während der Rest der Schaltflächen für alle Benutzer sichtbar ist.

Zum Beispiel: Nehmen wir an, wir wollen diese vier Hauptschaltflächen für alle, aber eine weitere Schaltfläche soll nur für Mitglieder einer bestimmten GRUPPE sichtbar sein.

Ich kann kein JavaScript. Wenn es wirklich einfach ist und jemand einen Code-Ausschnitt oder ähnliches bereitstellen könnte, wäre das unglaublich hilfreich :folded_hands:

Ich habe diesen Artikel gefunden, der der Zendesk-Plattform sehr ähnlich scheint. Ich denke, genau diese Art von Funktionalität suchen wir!

<div id="after-header">Inhalt</div>
<script type="text/discourse-plugin" version="0.8">
    api.onPageChange(() => {
        let currentUser = api.getCurrentUser();
        var groups = currentUser.groups;
        const isInGroup1 = groups.some(g => g.name === 'group1');
        const isInGroup2 = groups.some(g => g.name === 'group2');
        const isInGroup3 = groups.some(g => g.name === 'group3');
        if (isInGroup1) { 
            $("#after-header").addClass("group1");
         }
        if (isInGroup2) { 
            $("#after-header").addClass("group2");
         }
        if (isInGroup3) { 
            $("#after-header").addClass("group3");
         }         
    });
</script>
.button-a,
.button-b {
    display: none;
}
#after-header.group1 .button-a {
    display: block
}
#after-header.group2 .button-b {
    display: block
}

Es scheint auch zu funktionieren, wenn du api.onPageChange(() => { durch $( document ).ready(function() { ersetzt. Dann wird das Skript nicht auf jeder Seite geladen, aber ich bin mir nie sicher, wann ich api.onPageChange(() => { verwenden muss.

Wenn Sie diese Komponente installieren, werden alle Gruppen des aktuellen Benutzers als Klassen im <body>-Element der Seite hinzugefügt. Dadurch lassen sich weitere Änderungen ausschließlich mit CSS vornehmen.

haha, das wollte ich als Nächstes herausfinden

Hallo,

ich habe nach etwas Ähnlichem gesucht, aber unter Ausschluss einiger Gruppen, also habe ich es mit ChatGPT versucht, und die Antwort war:

Um ein HTML-Theme in Discourse zu erstellen, das ein Skript auslöst, das bestimmte Gruppen ausschließt, müssen Sie die Theme-Anpassungsoptionen von Discourse zusammen mit JavaScript verwenden, um Gruppen ausschlüsse zu handhaben. Discourse bietet api.getCurrentUser(), um Benutzerdetails abzurufen, einschließlich ihrer Gruppen, was nützlich sein kann, um Ihr Skript bedingt auszulösen.

Hier ist ein Beispiel, wie Sie dies im Abschnitt Ihres Themes oder Komponenten implementieren könnten:

<script type="text/discourse-plugin" version="0.8">
    api.onPageChange(() => {
        // Aktuelle Benutzerdetails abrufen
        const currentUser = api.getCurrentUser();

        if (currentUser) {
            // Liste der Gruppennamen, die von der Skriptausführung ausgeschlossen werden sollen
            const excludedGroups = ['group1', 'group2'];

            // Die Gruppen des Benutzers abrufen
            const userGroups = currentUser.groups.map(group => group.name);

            // Prüfen, ob der Benutzer zu einer ausgeschlossenen Gruppe gehört
            const isExcluded = excludedGroups.some(group => userGroups.includes(group));

            if (!isExcluded) {
                // Ihre benutzerdefinierte Skriptlogik hier
                console.log('Skript wird für diesen Benutzer ausgeführt.');
                // Beispiel: benutzerdefinierte Logik für nicht ausgeschlossene Benutzer auslösen
                // customScriptFunction();
            } else {
                console.log('Benutzer gehört zu einer ausgeschlossenen Gruppe, Skript wird nicht ausgeführt.');
            }
        }
    });
</script>

Erklärung:

  1. api.onPageChange(): Führt das Skript jedes Mal aus, wenn sich die Seite ändert.
  2. api.getCurrentUser(): Ruft die Details des aktuell angemeldeten Benutzers ab.
  3. excludedGroups: Listen Sie die Gruppen auf, die Sie ausschließen möchten.
  4. userGroups.includes(group): Prüft, ob der Benutzer zu einer ausgeschlossenen Gruppe gehört.
  5. Bedingte Skriptausführung: Das Skript wird nur ausgeführt, wenn der Benutzer keiner ausgeschlossenen Gruppe angehört.

Sie können customScriptFunction(); durch jedes Skript ersetzen, das Sie ausführen müssen. Lassen Sie mich wissen, wenn Sie weitere Anpassungen benötigen!

Ich meine, mein Verstand ist völlig überwältigt davon :exploding_head:. Ich habe es noch nicht ausprobiert, aber ist der ChatGPT-Code korrekt?