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:

I found this article which seems very similar, for the Zendesk platform, but I think that’s the type of functionality we’re looking for!

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

It also seems to work if you replace
api.onPageChange(() => {
with
$( document ).ready(function() {
and then the script won’t load on every page, but I never know for sure where I need api.onPageChange(() => { .

If you install this component, all groups of the current user will be added as classes in the page body, making it easy for CSS only further changes.

haha, that was going to be the next thing I tried to figure out

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?