Signatures Discourse

Ok, pour ceux qui veulent vraiment améliorer leurs signatures pour leur groupe (surtout si vous souhaitez utiliser les options pour qu’une signature fasse partie d’une mise à niveau/abonnement payant), voici le code (et la raison d’être) que je pense rendre cela bien meilleur, et qui peut vous aider à générer plus de mises à niveau. Cela m’a pris beaucoup d’essais, mais ça fonctionne. Faites attention aux endroits où vous devez remplacer les parties “XXXXX”.

Je voulais accomplir les 2 choses suivantes :
A) Je voulais désactiver la possibilité de NE PAS voir les signatures. Cela signifie que les utilisateurs qui effectuent une mise à niveau savent que leur signature sera vue par tout le monde.

B) Je voulais qu’UN SEUL groupe ait la possibilité de créer une signature.

  1. Allez dans Admin > Apparence > Thèmes et composants > Composants > Installer > Créer nouveau

  2. Ajoutez ce code dans l’onglet < head > :

<script>
// Attendre que la structure de base de la page se charge en premier
document.addEventListener("DOMContentLoaded", function() {
    
    // Configurer le observateur
    const observer = new MutationObserver(function(mutations) {
        // Trouver toutes les étiquettes de contrôle sur la page
        const labels = document.querySelectorAll('label.control-label');
        
        labels.forEach(label => {
            // Rechercher l'étiquette spécifique Signatures
            if (label.textContent.trim() === 'Enable Signatures') {
                // Trouver le conteneur principal contenant à la fois l'étiquette et la case à cocher et le masquer
                const controlGroup = label.closest('.control-group') || label.parentElement;
                if (controlGroup) {
                    controlGroup.style.display = 'none';
                }
            }
        });
    });

    // MAINTENANT commencer à observer le corps, car nous savons qu'il existe
    observer.observe(document.body, { childList: true, subtree: true });
});
</script>

3. Ajoutez ce code dans l'onglet css (remplacez XXXXX par le nom de votre groupe) :

/* Masquer la section de signature pour tout le monde */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Afficher uniquement si la classe 'user-is-XXXXX' est présente sur le corps */
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;
}
  1. Ajoutez ce code dans la balise < head > sous le premier bloc ci-dessus (remplacez XXXXX par le nom de votre groupe) :
<script>
(function() {
  const checkAccess = () => {
    // Discourse stocke les groupes de l'utilisateur actuel dans cet objet global
    const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
    
    if (user && user.groups) {
      // Vérifier si un nom de groupe correspond à "XXXXX"
      const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
      
      if (isXXXXX) {
        document.body.classList.add('user-is-XXXXX');
      }
    }
  };

  // Exécuter immédiatement
  checkAccess();

  // Exécuter chaque fois que l'utilisateur navigue entre les pages
  document.addEventListener('discourse-ready', checkAccess);
  
  // Sauvegarde : Exécuter à nouveau après 1 seconde pour les chargements lents
  setTimeout(checkAccess, 1000);
})();
</script>
  1. Ajoutez ce code dans l’onglet css sous le premier bloc ci-dessus (remplacez XXXXX par le nom de votre groupe) :
/* Masquer la section de signature pour tout le monde */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
    display: none !important;
}

/* Afficher uniquement si la classe 'user-is-XXXXX' est présente sur le corps */
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;
}

Fait.

Je ne suis pas développeur. Tout ce que je sais, c’est que cela fonctionne à 100 % sur mon site.

Aussi, à l’auteur du plugin – J’ADORERAIS la possibilité de limiter le nombre de caractères de la signature. J’ai essayé tant de choses mais rien n’a fonctionné.

1 « J'aime »