Ok, per coloro che vogliono davvero migliorare le loro firme per il loro gruppo (specialmente se si desidera utilizzare le opzioni per avere una firma come parte di un aggiornamento/abbonamento a pagamento), ecco il codice (e la logica dietro di esso) che penso lo renda molto migliore e possa aiutarvi a promuovere più aggiornamenti. Mi ci sono voluti un sacco di tentativi, ma funziona. Prestate attenzione a dove dovete sostituire le parti “XXXXX”.
Volevo ottenere le seguenti 2 cose:
A) Volevo disabilitare la possibilità di NON visualizzare le firme. Ciò significa che gli utenti che effettuano l’aggiornamento sanno che la loro firma sarà vista da tutti.
B) Volevo che SOLO un certo gruppo avesse la possibilità di creare una firma.
-
Vai su Admin > Appearance > Themes & components > Components > Install > Create new
-
Aggiungi questo codice nella scheda
<head>:
<script>
// Aspetta che si carichi prima la struttura base della pagina
document.addEventListener("DOMContentLoaded", function() {
// Imposta il watcher
const observer = new MutationObserver(function(mutations) {
// Trova tutte le etichette di controllo sulla pagina
const labels = document.querySelectorAll('label.control-label');
labels.forEach(label => {
// Cerca l'etichetta specifica "Signatures"
if (label.textContent.trim() === 'Enable Signatures') {
// Trova il contenitore principale che contiene sia l'etichetta che la casella di controllo e nascondilo
const controlGroup = label.closest('.control-group') || label.parentElement;
if (controlGroup) {
controlGroup.style.display = 'none';
}
}
});
});
// ORA inizia a osservare il body, poiché sappiamo che esiste
observer.observe(document.body, { childList: true, subtree: true });
});
</script>
3. Aggiungi questo codice nella scheda css (sostituisci XXXXX con il nome del tuo gruppo):
/* Nascondi la sezione firma per tutti */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* Mostrala solo se la classe 'user-is-XXXXX' è presente sul body */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
- Aggiungi questo codice nel tag
<head>sotto il primo blocco sopra (sostituisci XXXXX con il nome del tuo gruppo):
<script>
(function() {
const checkAccess = () => {
// Discourse memorizza i gruppi dell'utente corrente in questo oggetto globale
const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
if (user && user.groups) {
// Controlla se qualche nome di gruppo corrisponde a "XXXXX"
const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
if (isXXXXX) {
document.body.classList.add('user-is-XXXXX');
}
}
};
// Esegui immediatamente
checkAccess();
// Esegui ogni volta che l'utente naviga tra le pagine
document.addEventListener('discourse-ready', checkAccess);
// Backup: Esegui di nuovo dopo 1 secondo per catturare caricamenti lenti
setTimeout(checkAccess, 1000);
})();
</script>
- Aggiungi questo codice nella scheda css sotto il primo blocco sopra (sostituisci XXXXX con il nome del tuo gruppo):
/* Nascondi la sezione firma per tutti */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* Mostrala solo se la classe 'user-is-XXXXX' è presente sul body */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
Fatto.
Non sono uno sviluppatore. Tutto quello che so è che funziona al 100% sul mio sito.
Inoltre, all’autore del plugin: ADOREREI la possibilità di limitare il conteggio dei caratteri della firma. Ho provato tante cose ma niente ha funzionato.