Mostra HTML personalizzato nell'intestazione a un membro di un gruppo specifico

Ciao famiglia Discourse! Spero che esista una soluzione semplice per questo! Ho la sensazione che la risposta sia che debba usare un po’ di JavaScript.

Abbiamo 4 pulsanti nella sezione “dopo l’intestazione” delle impostazioni CSS/HTML del nostro pannello di amministrazione.

Vorremmo che alcuni pulsanti fossero visibili solo ai membri di gruppi specifici, mentre gli altri pulsanti siano visibili a tutti gli utenti.

Ad esempio: diciamo che vogliamo che quei 4 pulsanti principali siano visibili a tutti, ma vorremmo che un altro pulsante fosse visibile solo ai membri di un determinato GRUPPO.

Non conosco il JavaScript, quindi se è davvero semplice e qualcuno potesse fornire un frammento di codice o qualcosa del genere, sarebbe di grande aiuto :folded_hands:

Ho trovato questo articolo che sembra molto simile, per la piattaforma Zendesk, ma credo che sia il tipo di funzionalità che stiamo cercando!

<div id="after-header">Cose</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
}

Sembra che funzioni anche se sostituisci
api.onPageChange(() => {
con
$( document ).ready(function() {
e quindi lo script non verrà caricato su ogni pagina, ma non sono mai sicuro di dove debba usare api.onPageChange(() => {.

Se installi questo componente, tutti i gruppi dell’utente corrente verranno aggiunti come classi nel corpo della pagina, rendendo semplici ulteriori modifiche tramite CSS solo.

haha, quello era proprio il prossimo passo che stavo cercando di capire

Ciao,

Stavo cercando qualcosa di simile, ma escludendo alcuni gruppi, quindi ho provato con ChatGPT e la risposta è stata:

Per creare un tema HTML in Discourse che attivi uno script escludendo gruppi specifici, dovrai utilizzare le opzioni di personalizzazione del tema di Discourse insieme a JavaScript per gestire le esclusioni di gruppo. Discourse fornisce api.getCurrentUser() per recuperare i dettagli dell’utente, inclusi i suoi gruppi, che possono essere utili per attivare condizionalmente il tuo script.

Ecco un esempio di come potresti implementarlo nella sezione </head> del tuo tema o componente:

<script type="text/discourse-plugin" version="0.8">
    api.onPageChange(() => {
        // Recupera i dettagli dell'utente corrente
        const currentUser = api.getCurrentUser();

        if (currentUser) {
            // Elenco dei nomi dei gruppi che si desidera escludere dall'esecuzione dello script
            const excludedGroups = ['group1', 'group2'];

            // Ottieni i gruppi dell'utente
            const userGroups = currentUser.groups.map(group => group.name);

            // Verifica se l'utente appartiene a un gruppo escluso
            const isExcluded = excludedGroups.some(group => userGroups.includes(group));

            if (!isExcluded) {
                // La tua logica di script personalizzata qui
                console.log('Script eseguito per questo utente.');
                // Esempio: attiva qualsiasi logica personalizzata per gli utenti non esclusi
                // customScriptFunction();
            } else {
                console.log('L\'utente appartiene a un gruppo escluso, script non eseguito.');
            }
        }
    });
</script>

Spiegazione:

  1. api.onPageChange(): Esegue lo script ogni volta che la pagina cambia.
  2. api.getCurrentUser(): Recupera i dettagli dell’utente attualmente connesso.
  3. excludedGroups: Elenca i gruppi che si desidera escludere.
  4. userGroups.includes(group): Verifica se l’utente appartiene a un gruppo escluso.
  5. Esecuzione condizionale dello script: Lo script verrà eseguito solo se l’utente non fa parte di alcun gruppo escluso.

Puoi sostituire customScriptFunction(); con qualsiasi script di cui hai bisogno. Fammi sapere se hai bisogno di ulteriori aggiustamenti!

Cioè, la mia mente è completamente sconvolta da questo :exploding_head:. Non l’ho ancora provato, ma il codice di ChatGPT è corretto?