AccueilFAQRechercherMembresGroupesS'enregistrerConnexion

Forum de graphisme, codage et game design proposant des tutoriels, astuces, libres services et commandes dans les domaines de l'infographie amateur, de l'intégration web (HTML et CSS essentiellement) ainsi que dans la conception de RPG sur forum.


    Changement automatique du rang selon le groupe

    Partagez
    avatar
    Onyx
    FémininAge : 24Messages : 3132

    le Lun 18 Avr 2016 - 2:12




    Changement automatique du rang selon le groupe


    Salut !

    Pour certains administrateurs, il y a beaucoup de changements de groupes et de rangs. Déjà que changer le groupe de 15 personnes par jour prend du temps, devoir en plus changer leur rang à chaque fois ne rend pas les choses très faciles.

    Du coup, j'ai créé une petite astuce pour tricher et lier les rangs au groupe de la personne à la demande de Darkius.

    Plus précisément, cette astuce remplace le rang et l'image de rang par un "faux titre de rang" et une "fausse image de rang" et un javascript va "regarder la couleur du pseudo de la personne", trouvera le rang et l'image de rang associés à ce groupe (à cette couleur) et le mettra dans l'espace du "faux titre de rang" et de la "fausse image de rang".

    Attention :
    - Si une personne fait partie de plusieurs groupes, le groupe qui apparaîtra sera celui dont elle a la couleur, pas les autres.
    - Cela agit seulement dans les messages, pas pour le rang dans les profils. Je recommande de tout simplement supprimer les rangs pour qu'ils ne s'affichent nul part. Comme ça, les seuls rangs qui s'afficheront seront les faux.


    Ce LS est en trois parties.
    • Tout d'abord, nous allons créer l'espace pour les faux rangs dans le template des messages.
    • Puis, nous allons ajouter le javascript qui permet de faire fonctionner cette astuce.
    • Enfin, nous allons voir comment mettre vos propres rangs et groupes dans le javascript.


    - La version du forum est PhpBB2.
    - Il est possible (mais pas toujours) que l'astuce ne fonctionne pas si votre template a déjà été modifié. Si c'est le cas, vous pouvez aller dans "personnalisations" ou "problème avec mon code" pour recevoir de l'aide
    Mettre un crédit vers Never-Utopia est obligatoire.


    Merci de laisser un message pour donner vos impressions, commentaires et/ou remerciements ^^



    1. Ajouter l'espace des "faux rangs" (Template Viewtopic_Body)


    Nous allons commencer par aller dans les templates, plus précisément dans le template "viewtopic_body".

    Pour cela, nous allons aller dans :
    > PANNEAU D'ADMINISTRATION
    > > AFFICHAGE
    > > > TEMPLATES
    > > > > GÉNÉRAL
    > > > > > VIEWTOPIC_BODY

    Puis, on chercher cette variable :
    Code:
    {postrow.displayed.POSTER_RANK}

    Qu'on va remplacer par ceci :
    Code:
    <span class="rangtitre"></span>


    Et on va trouver cette variable :
    Code:
    {postrow.displayed.RANK_IMAGE}

    Qu'on va remplacer par ceci :
    Code:
    <span class="rangimg"></span>



    2. Ajouter le javascript


    Maintenant que les rangs normaux ont été remplacés par les faux rangs, on va aller ajouter le javascript.

    Pour cela, nous allons aller dans :
    > PANNEAU D'ADMINISTRATION
    > > MODULES
    > > > HTML & JAVASCRIPT
    > > > > GESTION DES CODES JAVASCRIPT

    Si le "Activer la gestion des codes Javascript" est à "non", il faut le changer pour "oui" et enregistrer.


    Ensuite, on clique sur "Créer un nouveau Javascript"
    On choisit un nom, par exemple comme "Système de faux rangs".
    On choisit le placement "Sur les sujets" (c'est super important).

    Enfin, on met le javascript suivant et on enregistre :
    Code:
    $(function () {
      var groupcouleur = [
      "rgb(144, 55, 199)",
      "rgb(162, 176, 102)",
      "rgb(133, 199, 194)",
      "rgb(67, 145, 181)",
      "rgb(10, 163, 97)",
      ];

      var group1 = [
      "Élèves",
      "Professeurs",
      "Personnel",
      "Habitants",
      "PNJ",
      ];

      var group2 = [
      "http://img11.hostingpics.net/pics/215624jaime.png",
      "http://illiweb.com/fa/subsilver/icon_pm.gif",
      "http://illiweb.com/fa/subsilver/icon_email.gif",
      "http://illiweb.com/fa/subsilver/icon_www.gif",
      "http://illiweb.com/fa/subsilver/icon_online_fr.gif",
      ];

      var nbgroup = groupcouleur.length;
      $('tr.post > td span.name > strong > a > span > strong').each(function () {
        var rang1 = $(this).closest('tr.post').find('td:first').find('.rangtitre');
        var rang2 = $(this).closest('tr.post').find('td:first').find('.rangimg');
        var uncolor = $(this).css('color');
        for (i=0; i < nbgroup; i++) {
          if (uncolor == groupcouleur[i]) {
            $(rang1).html(group1[i]);
            $(rang1).css('color', groupcouleur[i]);
            $(rang2).html('<img src="'+group2[i]+'" alt="Image à remplacer" />');
          }
        }
      });
    });



    3. Adapter le javascript à vos propres groupes et rangs


    Voici le fonctionnement du javascript :
    Il va aller "regarder la couleur du pseudo". Ensuite, il consulte une liste des couleurs des groupes (que vous allez devoir mettre vous-même) pour savoir le groupe auquel la couleur du nom correspond. Puis, il regarde la liste de rang (que vous devrez faire vous-même) et il ajoute le titre du rang et l'image du rang qui correspond au groupe.

    On va décortiquer le javascript pour savoir où on doit modifier quoi Wink





    Partie des couleurs des groupes qui ont des rangs

    Si on décortique le javascript, la première partie, "groupcouleur", comporte la couleur de chacun des groupes en mode "rgb":
    Code:
    $(function () {
      var groupcouleur = [
      "rgb(144, 55, 199)", /*Couleur du 1er groupe*/
      "rgb(162, 176, 102)", /*Couleur du 2e groupe*/
      "rgb(133, 199, 194)", /*Couleur du 3e groupe*/
      "rgb(67, 145, 181)", /*Couleur du 4e groupe*/
      "rgb(10, 163, 97)", /*Couleur du 5e groupe*/
      ];

    Vous devez aller dans chacun de vos groupes et copier/coller exactement la couleur qui appartient à chaque groupe. Vous verrez que la couleur est en mode "hex", soit quelque chose comme "#AD8H46". Or, le javascript utilise uniquement les codes en mode "rgb", tel que "rgb(173, 8, 70)", ce qui donne la même couleur.

    Pour transférer vos codes de couleur "hex" en codes de couleur "rgb", vous pouvez utiliser ce site : http://www.javascripter.net/faq/hextorgb.htm . Bref, une fois que vous avez la couleur en "rgb", vous la mettez dans la partie "groupcouleur" pour chacun de vos groupes.





    Partie des "faux titres de rang"

    Ensuite, la deuxième partie, "group1", sert à mettre le titre de chacun des rangs : :
    Code:
     var group1 = [
      "Élèves", /*Titre du 1er groupe*/
      "Professeurs", /*Titre du 2e groupe*/
      "Personnel", /*Titre du 3e groupe*/
      "Habitants", /*Titre du 4e groupe*/
      "PNJ", /*Titre du 5e groupe*/
      ];

    À noter que le premier rang doit correspondre à la couleur du premier groupe que vous avez mis dans la section précédente et ainsi de suite.

    D'ailleurs, si vous voulez personnaliser chacun des rangs, vous pouvez facilement mettre quelque chose comme :
    Code:
     var group1 = [
      "<span style='color: red;'>Élèves</span>",
      "<span style='color: blue;'>Professeurs</span>",
      "<span style='color: orange;'>Personnel</span>",
      "<span style='color: purple;'>Habitants</span>",
      "<span style='color: green;'>PNJ</span>",
      ];

    Ou encore :
    Code:
     var group1 = [
      "<span class='nom_de_class1'>Élèves</span>",
      "<span class='nom_de_class2'>Professeurs</span>",
      "<span class='nom_de_class3'>Personnel</span>",
      "<span class='nom_de_class4'>Habitants</span>",
      "<span class='nom_de_class5'>PNJ</span>",
      ];





    Partie des "fausses images de rang"

    La troisième partie, "group2", sert à mettre l'url des images de rang pour chacun des groupes :
    Code:
     var group2 = [
      "http://img11.hostingpics.net/pics/215624jaime.png", /*Image du 1er groupe*/
      "http://illiweb.com/fa/subsilver/icon_pm.gif", /*Image du 2e groupe*/
      "http://illiweb.com/fa/subsilver/icon_email.gif", /*Image du 3e groupe*/
      "http://illiweb.com/fa/subsilver/icon_www.gif", /*Image du 4e groupe*/
      "http://illiweb.com/fa/subsilver/icon_online_fr.gif", /*Image du 5e groupe*/
      ];

    À noter que la première url d'image doit correspondre au premier titre du rang de la section précédente et à la couleur du premier groupe que tu as mis dans la section d'avant et ainsi de suite.





    La partie où le javascript fait actuellement quelque chose

    La dernière partie du javascript, soit le reste, sert à repérer la couleur du nom de l'utilisateur, de la comparer avec le groupcouleur et d'appliquer le titre de rang et l'image de rang qui correspond :
    Code:
     /*On calcule le nombre de couleurs au total*/
      var nbgroup = groupcouleur.length;

      /*On va chercher chaque nom pour chaque message posté pour appliquer le reste du javascript. On répète le processus à chaque fois qu'on trouve un nom*/
      $('tr.post > td span.name > strong > a > span > strong').each(function ()

        /*On sélectionne le l'espance du "faux titre de rang" dans le template*/
        var rang1 = $(this).closest('tr.post').find('td:first').find('.rangtitre');

        /*On sélectionne l'espace de "fausse image de rang" dans le template*/
        var rang2 = $(this).closest('tr.post').find('td:first').find('.rangimg');

        /*On prend la couleur du pseudo*/
        var uncolor = $(this).css('color');

        /*On va aller comparer la couleur de pseudo à chaque couleur de groupe*/
        for (i=0; i < nbgroup; i++) {

          /*Si la couleur du pseudo = la couleur du groupe, on va faire les modifications*/
          if (uncolor == groupcouleur[i]) {

            /*On ajoute le titre de rang qui correspond à la couleur du groupe dans l'espace du "faux titre de rang"*/
            $(rang1).html(group1[i]);

            /*On donne la même couleur au titre de rang que la couleur du groupe*/
            $(rang1).css('color', groupcouleur[i]);

            /*On ajoute l'image de rang qui correspond à la couleur du groupe dans l'espace de la "fausse image de rang"*/
            $(rang2).html('<img src="'+group2[i]+'" alt="Image à remplacer" />');
          }
        }
      });
    });

    Ce bout n'a absolument pas à être modifié pour fonctionner. Sérieux, pas touche, à moins d'être sûr de savoir ce que vous faites, ok?





    Personnaliser le titre de rang et l'image de rang

    On a déjà vu précédemment qu'on pouvait entourer d'un span avec une classe différente chaque titre de rang, donc vous pouvez vous servir de ces classes pour personnaliser chaque rang.

    Pour personnaliser tous les titres de rang à la fois, vous pouvez mettre ceci dans votre CSS :
    Code:
    /*Titres des rangs*/
    .rangtitre {
      propriété: valeur;
    }

    Pour personnaliser tous les images de rang à la fois, vous pouvez mettre ceci dans votre CSS :
    Code:
    /*Images des rangs*/
    .rangimg img {
      propriété: valeur;
    }

    Quant à personnaliser les images de rang individuellement, vous pouvez mettre ceci dans votre CSS et remplacer le URL par le lien de l'image de rang à modifier :
    Code:
    .rangimg img[src="URL"] {
      propriété: valeur;
    }





    Partie des rangs dans le reste du forum

    À ma connaissance, les rangs apparaîssent à un seul autre endroit dans le forum, soit le profil.

    Le hic, c'est que puisque le profil (à moins que vous ayez la version simplifié du profil) ne peut pas être modifié entièrement dans un template, on peut difficilement remplacer le rang par le faux rang.

    Donc, si la personne change de groupe, le rang se changera automatiquement dans les messages (grace aux "faux rang"), mais restera pareil dans le profil. Alors si quelqu'un va voir, il sera genre "WTF?". Pas trop joyeux ><

    Ce que je vous conseille, une fois que vous avez installé le javascript comme il faut et vérifié qu'il fonctionne bien, c'est d'aller carrément supprimer les rangs qui ne sont plus nécessaire (dans le panneau d'administrateur, dans les utilisateurs, dans les rangs, vous les supprimez tous).

    Comme ça, les rangs ne seront simplement pas affichés sur le profil (ce qui n'est vraiment pas un drame, on s'entend) et ne contraseront donc plus avec le faux rang des messages. Perfect!





    C'est tout! Si jamais vous avez des problèmes avec cette astuce, n'hésitez pas à passer dans Un problème avec mon code ou Personnalisations si vous voulez modifier le fonctionnement de l'astuce et que vous avez besoin d'aide.

    À plus !


    Dernière édition par Onyx le Mer 21 Déc 2016 - 23:24, édité 8 fois



    avatar
    Cheshire Cat
    FémininAge : 21Messages : 937

    le Lun 6 Juin 2016 - 22:36

    Wow, ça m'a l'air fort cool tout ça dit donc ! Ca pourrait être vachement intéressant à mettre en place sur un forum RPG simple ou multi-univers. Vraiment c'est grave cool :love:

    (oui ce message est totalement intéressé /PAN/)
    avatar
    Géranium
    FémininAge : 18Messages : 56

    le Ven 6 Jan 2017 - 13:25

    Merci !
    avatar
    Kelalin
    FémininAge : 25Messages : 1946

    le Ven 6 Jan 2017 - 15:32

    Merci pour le partage !
    avatar
    Louna Luna
    FémininAge : 22Messages : 147

    le Ven 9 Juin 2017 - 16:14

    Vraiment super pratique !
    avatar
    JohnOff
    MasculinAge : 21Messages : 5

    le Sam 6 Jan 2018 - 22:05

    Trop bien merci
    Contenu sponsorisé


      La date/heure actuelle est Mar 21 Aoû 2018 - 2:09