Maonyn » divers µforumactif

Voir le sujet précédent Voir le sujet suivant Aller en bas  Message [Page 1 sur 1]

1 divers µforumactif le Mar 5 Aoû - 3:51

Le mieux qu'on puisse faire pour le moment, je crois que c'est chercher * dans Modules > Points et réputation > Don de points, cela fourni une liste triée alphabétiquement de 50 membres par page avec leurs points.

Ensuite si on la veut trier par point, on pourrait copier coller chaque page :

Code:
한正日   +100436   
aaaaa   0   
paul   +90   
Ea   +455   
kid   0   
brice   +3   
morgiana   +33   
TheGame90   0   
Wana   0

dans un champ de texte qui les trie : http://aska.123.st/h39-trie-liste-point

pour mon exemple le résultat est :

Code:
한正日   +100436   
Ea   +455   
paul   +90   
morgiana   +33   
brice   +3   
Wana   0
aaaaa   0   
TheGame90   0   
kid   0

2 Re: divers µforumactif le Ven 8 Aoû - 6:20

On peut aller chercher les données de la feuille de personnage ou du profil par javascript.

On charge la page par du javascript et on y prend ce qu'on souhaite.

Par exemple sur ce forum je pourrais mettre ceci quelque part :

Code:

Vous êtes fondateur ? La réponse est : <span class="_pf">{{profile_field_7_3}}</span> et votre humeur est " <input type="text" class="_pf" value="{{profile_field_13_-11}}" /> ".

Les profile_field_7_3 et profile_field_13_-11 sont des identifiants ( id="..." ) présent sur la page d'édition de profil, et pour les avoir il faut regarder le code source :


Et ajouter ce script où nécessaire ( voir ce tutoriel ) :

Code:
// on fait quelque chose seulement si connecté
if(document.cookie.indexOf('fa_'+location.hostname.replace(/\./g,'_')+'_data=')!=-1)

    // une fois que la page est chargée
    $(function(){

        // si il n'y a aucun élément html avec class="_pf" on ne fait rien
        if($("._pf").length==0) return;

        // on charge la page de profile qui se trouvera dans la variable 'd'
        $.get('/profile?mode=editprofile', function(d) {

            // on détecte les {{profile_field_...}} et on a une fonction pour les remplacer
            var r = /\{\{\s*profile_field_[0-9_-]+\s*\}\}/g, f = function(s){
                var v, m = s.match(r);
                // si il n'y a pas de {{profile_field_...}} à la chaîne passée en paramètre on ne fait rien de ce qui suit
                if(!m.length) return s;

                // on va traiter chaque {{profile_field_...}} trouvé       
                for(var i= 0; i<m.length; i++) {
                    // on récupère dans la variable v juste le profile_field_... en cours
                    v= m[i].substr(2, m[i].length-4).trim();
                    // si id="profile_field_..." est sur la page de profil on continue
                    if($('#'+v, d).length) {
                        // si le champ est un champ de texte ou une zone de texte on remplace par la valeur
                        if($('#'+v, d).is('input[type="text"],textarea'))
                            m[i]= $('#'+v, d).val();
                        // si le champ est une liste déroulante on remplace par le texte de l'élément sélectionné
                        else if($('#'+v, d).is('select'))
                            m[i]= $('#'+v+' option[selected]', d).text();
                        // si le champ est une case à cocher on remplace par "coché" ou "non coché"
                        else if($('#'+v, d).is('input[type="checkbox"])'))
                            m[i]= ($('#'+v+'[checked]').length?'coché': 'non coché');
                        // si le champ est une liste, on remplace par les éléments cochés de la liste séparés par des virgules
                        else if($('#'+v, d).is('ul')) {
                            var stack = [];
                            $('#'+v+' input[checked]', d).each(function(){
                                stack.push($(this).closest("label").text());
                            });
                            m[i]= stack.toString()
                        }
                    }
                }
                // après tout ça on réassemble la chaîne ( qui aura subi les remplacements ) 
                var p = s.split(r);
       
                s = p[0];
                for(var i= 1; i < p.length; i++)
                    s += m[i-1] + p[i];
                return s;
            };
            // on boucle sur les éléments avec class="_pf" et on tente de faire des remplacements
            $('._pf').each(function(){
                var v;
                if((v = $(this).val()) && v.indexOf('}}')!=-1)
                    $(this).val(f(v));
                if((v = $(this).html()) && v.indexOf('}}')!=-1)
                    $(this).html(f(v));
            });
        });
    });

Si c'est sur une page html sans le haut ni le bas du forum, il faut l'entourer de <script> et </script> et faire précéder le script de :

Code:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>

Sinon on pourrait aussi juste les enregistrer dans le navigateur, par exemple :

Code:
<input class="remember_value" id="champ_xxx" />

en ayant le script suivant sur la page :

Code:
// le script ne fonctionne que si le navigateur a localStorage ( il faut un navigateur assez vieux pour que ça ne fonctionne pas )
window.localStorage && $(function(){
  // si il y a des éléments html avec class="remember_value", on boucle sur chacun d'eux
  $('.remember_value').each(function(){
    // et si il y a une valeur sauvegardée dans le navigateur
    if(localStorage.getItem('rv_'+$(this).attr('id'))!==null)
      // on la restaure dans le champ
      $(this).val(localStorage.getItem('rv_'+$(this).attr('id')));
  // et également à chaque fois que la valeur dans le champ est changée
  }).change(function(){
    // on met à jour la sauvegarde du champ dans le navigateur
    localStorage.setItem('rv_'+$(this).attr('id'), $(this).val());
  });
});

devrait permettre que la valeur des champs avec class="remember_value" soient récupérés aux prochains affichages.

On peut également avoir un champ qui aura la même valeur entre plusieurs pages ( il suffit que le id="..." soit identique ).

3 Re: divers µforumactif le Ven 8 Aoû - 14:43

sinon pour cacher le "dernière édition par ...", voici un script à mettre sur les sujets :

Code:
$(function(){
  $('#phpbb .postbody,#ipbwrapper .post-entry,.entry-content p:last-child,.postbody + .gensmall').each(function(){
    var c= this.childNodes;
    for(var i=c.length-1; i>=0;i--) {
      if(c[i].nodeType==3 && c[i].nodeValue.substr(0,21)=="Dernière édition par ") this.removeChild(c[i]);
    }
  })
});

4 Re: divers µforumactif le Sam 23 Aoû - 18:36

pour remplacer les virgules par un séparateur et mettre un retour toutes les X liens de sous-forums

Code:
$(function() {
    var sep = '&nbsp;/&nbsp;', max_by_line = 3;
    $('.s_forum').each(function() {
        var nth = 0;
        $('a.gensmall', this).each({
            var next = this.nextSibling;
            if (next && next.nodeType == 3 && next.nodeValue = ", ") {
                if (++nth % max_by_line) $(next).replaceWith(sep);
                else $(next).replaceWith('<br>');
            }
        });
    });
});

5 Re: divers µforumactif le Jeu 16 Oct - 2:30

...

Mais :


Une façon que je trouve plus simple et propre de faire cela, serait d'ajouter à chaque message une classe avec l'identifiant du membre par le biais d'un script de ce style :

Code:
$(function(){
  $('tr.post').each(function(){
    $(this).addClass("user"+($('span.name a[href^="/u"]', this).attr('href')||"0").replace(/^\/u([1-9][0-9]*).*$/,'$1'));
  });
});

Ensuite si on veut personnaliser le CSS par défaut du message de l'utilisateur 2 ( on voit l'identifiant de l'utilisateur dans l'adresse de son profil, par exemple divine.forumactif.org/u2 est l'utilisateur 2 ), il suffit d'ajouter un CSS de ce style dans la feuille de style ( PA > Affichage > Couleurs > Feuille de style ) :

Code:
/* css de message de dudunette */
.user2 .postbody  {
  color: red;
  text-decoration: underline;
  font-style: italic;
  font-weight: bold;
  font-family: "trebuchet ms", serif;
  font-size: 1.1em;
}

Cordialement.

6 Re: divers µforumactif le Dim 19 Oct - 11:34

un code pour avoir le même résultat que ce tutoriel sur la page des notifications

à mettre sur toutes les pages :

Code:
location.pathname=="/profile" && (1||location.search=="?mode=editprofile&page_profil=notifications") && $(function(){
 
  var texte_milieu = " a posté dans ";
  var si_titre_vide = "ce sujet";
 
  $('.table1 td:first-child,td.gen:first-child,.ipbtable td:first-child,.tcr .postdetails').each(function(){
    var a = $(this).html();
    var c = a.match(/^(.*) a écrit un message dans (<a href="\/t[0-9]+(p[0-9]+)?-([^#?"]*)[^"]+">)[^<]+<\/a>$/);
    c&&(b=c[1]+texte_milieu+c[2],a=c[4],a="topic"==a||/^[\s-]*$/.test(a)?si_titre_vide:a.replace(/-/g," ").replace(/(^\s+|\s+$)/g,""),$(this).html(b+a+"</a>"))
  });
 
});

7 Re: divers µforumactif le Mer 10 Déc - 11:43

pour retirer les @ de @pseudo :

Code:
$(function(){
  $("div.postbody a[title]").each(function() {
    $(this).attr("href").match(/^\/u[0-9]+$/) && "@" == $(this).text().substr(0, 1) && 1 == this.childNodes.length && 3 == this.childNodes[0].nodeType && $(this).text($(this).text().substr(1));
  });
});

Voir le sujet précédent Voir le sujet suivant Revenir en haut  Message [Page 1 sur 1]