Compteur de lettres, affiché sous le message.

2 participants

Voir le sujet précédent Voir le sujet suivant Aller en bas

Résolu Compteur de lettres, affiché sous le message.

Message par Archas Mar 12 Juil 2011 - 4:27

Bonsoir. Ça peut sembler inutile mais j'ai vraiment besoin d'aide là dessus. Mon besoin est clair:

j'aimerais affiché la longueur, en lettres, d'un message, et ce, à la toute fin du message, en bas, dans un coin. J'ai essayer ceci :

Code:
<script type="text/javascript" language="JavaScript">   

var seedie = "{postrow.displayed.MESSAGE}";
var resultie = seedie.length;

$(document).ready(function(){

$(".textie").html(" Total : " + resultie + " lettres. ");

});
   </script>

Et ça marche jusqu'à un certain point. Il est au bon endroit, dans un DIV qui a la classe "textie", il est joli et compte très bien le nombre de lettres exactement comme je le souhaite mais, bien évidemment, ça bug à un moment donné. Lorsqu'il y a une réponse, le code ne compte que le dernier message et ce, partout. Donc admettons que le message principal a 200 lettres, et le second en a 100, ça va afficher 100 partout. Et ainsi de suite. Seulement le dernier message est comptabilisé, et tout les compteurs se ré-initialisent à la nouvelle valeur à chaque nouveau message dans un topic donné.

Alors j'ai pensé à la "variable" {postrow.displayed.U_POST_ID}. Ce truc (j'ignore le terme scriptien pour le désigner) est en réalité le ID du message. Puisqu'il existe aucuns messages qui a un ID identique à un autre, si je réussissais d'un moyen ou d'un autre "d'associé" le ID à son message ({postrow.displayed.MESSAGE}), le problème sera probablement résolu. Cependant j'ai aucunes idées de faire ça. Aucune inspiration, et des heures de recherches vaines.

Merci à ceux qui voudront bien m'aider dans ma cause perdue Razz

PS: Je crois que le positionnement du code à peut être un effet. Au début il se situais dans le template Overall_header, mais à cause de cela, la valeur était constemment zéro. Je l'ai donc placé dans viewtopic_body, directement sous

Code:
<span class="gensmall">{postrow.displayed.EDITED_MESSAGE}</span>
</td>
</tr>
</table>

Je sais que ça semble étrange, mais ça affiche exactement comme je le souhaite, à part bien sûr pour la variable qui ne "s'actualise" pas. Placé autrement, la variable donne zéro généralement. Surtout si c'est placé au dessus de lorsque {postrow.displayed.MESSAGE} est appelé pour affiché l'actuel message du membre.


Dernière édition par Archas le Mar 2 Aoû 2011 - 21:06, édité 1 fois
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Mer 13 Juil 2011 - 4:47

Up! C'est pour une bonne cause. Une fois ce problème résolu, mon forum va enfin pouvoir devenir fonctionnel. Ça fais des mois que je travaille ce code précisement et cette partie me fait défaut...

Merci!
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Jeu 14 Juil 2011 - 5:34

Up Smile
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Sam 16 Juil 2011 - 1:21

Archas a écrit:Up Smile

S'il vous plaiiiiiiiiiit. Smile Il y a TELLEMENT de choses utiles rapportés à ce code. Je peux partager, si quelqu'un veut bien m'aider Razz

Edit : J'ai eu une idée et j'ai essayer ceci:

Code:
<script type="text/javascript" language="JavaScript">   

   var seedie = "{postrow.displayed.MESSAGE}";
   var resultie = seedie.length;
   var indie = "{postrow.displayed.U_POST_ID}";

   $(document).ready(function(){

      if(document.getElementById(" + indie + ")
      {

         $(".textie").html(" blablabla " + resultie + " blablabla2 ");

      }
   });
      </script>

Je me suis dit que le message "actualiserait" si j'utilisais un .getElementById cependant cette commande m'est très obscure. Je crois par contre que je suis sur la bonne route! J'ai vu des trucs plus complexes que ça.
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Lun 18 Juil 2011 - 3:16

Up...
En ignorant le code au précédent message, j'ai vérifier et la variable fonctionne. Cependant, elle affiche mal. Laissez moi expliquer:

Dans le code source, j'ai essayer et le compteur apparait comme il se doit. Mais c'est en visualisant la page (peu importe le navigateur) que cela ne fonctionne plus. Quelqu'un a une idée? Il faudrait que ma variable puisse affiché multiple valeurs simultanément... je crois que ça règlerait mon problème.

Edit: Après des recherches j'ai trouver ce topic (anglais)
Spoiler:

Et j'ai essayer de modifier le code ainsi::

Code:
<script type="text/javascript" language="JavaScript">   

function comptelettres()
   {

   var seedie = "{postrow.displayed.MESSAGE}";
   var resultie = seedie.length;
   return [seedie, resultie];
   }

var a = comptelettres();

$(document).ready(function()
   {
      $(".textie").html(" Nombre de lettres :: " + a[1] + " <br/><br/> test perso: Message affiché, en répétition afin de voir où est le problème:: " + a[0]);
   }
);

</script>
Encore là, sa position ne change rien. Au moins l'idée est là. PS: Le document.ready est nécéssaire sinon le dernier message d'une page n'a aucun code fonctionnel.
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Jeu 21 Juil 2011 - 0:34

up.
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Sam 23 Juil 2011 - 22:05

Uppidity up Smile
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Mar 26 Juil 2011 - 1:02

Up et sans nouvelles :/ J'essaie..
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Mer 27 Juil 2011 - 1:03

Up!
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Ven 29 Juil 2011 - 4:24

Sad Up?
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Ea Ven 29 Juil 2011 - 4:59

Bonjour,


Moi je mettrais ce script sur les pages de sujet :

Code:
$(function(){
  $("div.postbody").each(function(){
    $(this).after('<span class="total-lettres">Total : ' + $(this).text().length + ' lettres.</span>');
  });
});
Le :

Code:
$(function(){

});
Permet de retarder l'exécution du script à la fin de la page ( car le script n'a accès qu'à ce qui se trouve avant lui donc il n'a pas au départ "accès" aux éléments de la page sans le retarder ), ensuite le :

Code:
$("div.postbody")
Sélectionne les éléments de type <div class="postbody"></div> ( c'est à dire les messages ) et faire :

Code:
$(elements).each(function(){
  // code
});
Ce qui exécute le code pour chacun des éléments sélectionnés ( l'un après l'autre, et à l'intérieur on à accès à l'élément en cours par la variable this ).

Ensuite dans le code :

Code:
$(this).after("code html")
Met le code html après l'élément ( donc ici après le message ) et $(this).text() renvoie le texte du message dont on regarde la longueur en faisant $(this).text().length.

{postrow.displayed.U_POST_ID}. Ce truc (j'ignore le terme scriptien pour le désigner)
Je dirais " la variable de template remplacée par l'identifiant d'une message affiché ", ou plus simplement "l'id du message" =P
Ea

Ea
Aidactif
Aidactif

Messages : 23583
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Mar 2 Aoû 2011 - 3:14

Bonsoir,

Je peux posé cela au même endroit où j'ai mis l'autre code?... Je ne l'ai pas essayer intégralement encore, mais j'ai modifié mon code de base pour tester un peu en me fiant à vos conseils. Et je peux dire qu'il y a un petit problème déjà...
Ça ne compte plus quand il s'y trouve des smileys/urls/autre trucs que je n'ai pas encore déterminé. silent Si c'est possible de les ignorer... Mais Merci pour ta réponse!
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Ea Mar 2 Aoû 2011 - 10:50

Je n'ai pas compris, vous dites que ça les ignore et demander si c'est possible de les ignorer.

Et bien oui ça les ignores ( enfin le texte du lien devrait compter mais une image ça non ça ne doit pas compter ).


Ea

Ea
Aidactif
Aidactif

Messages : 23583
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Mar 2 Aoû 2011 - 20:13

Enfait, le code n'apparait plus du tout, probablement à cause des guillemets ("). Plus rien n'affiche lorsqu'il s'y trouve une image/smiley ou une URL. Alors j'aimerais que le code "passe par dessus", les ignore. Enfin, au moins les balises HTML, puisque c'est surtout cela qui encombre. D'ailleurs, les balises BBcode et HTML sont comptées (lorsqu'elles n'ont pas de guillemets)...

Désolée de ne pas avoir été très claire... par "ne compte plus" je voulais dire "ne fonctionne plus."

Edit: J'ai lu quelques trucs de RegExp, j'ai essayer sur une page de test et bien la chaîne que j'ai trouvée pour trouver les balises HTML et tout ce quelles contiennent ne "fonctionne pas" non plus, mais c'est peut être moi qui l'utilise mal... encore un problème de guillemets, mais cette fois, au sein du code. C'est la première fois que je travaille avec cela donc..

voici l'appercu de la page html de test que j'ai créée afin de comprendre comment utiliser les regular expressions.

Code:
<html>
<head>
   <title>un titre !</title>
   <script type="text/javascript" language="javascipt">
      function testus()
      {
         var exp1 = new RegExp("<[A-z]*>", "g"); //va chercher les balises qui contiennent du texte
         txtBox = document.getElementById("txtLolus");
         strMessage = txtBox.value.replace(exp1, '') + "\n" + txtBox.value.length; //remplace la chaîne cherchée par un vide. Note, ce sont deux apostrophes. Il affiche aussi le nombre de lettre du message afin de voir si c'est encore compté //
         
         alert(strMessage);                         
      }
   </script>
</head>

<body>
   <h1>TEST</h1>
   <input type="text" size="75" id="txtLolus" />
   <input type="button" value="asdf" onclick="testus();" />
</body>
<html>

C'est tout simple, si j'insère une paire de balise < > et il s'y trouve du texte à l'intérieur, elle est remplacée par du vide. Mais moindrement qu'il s'y trouve un espace, ou quoi que ce soit d'autre, elle y reste. Alors j'ai trouver que la chaîne à chercher devrait être

Code:
</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)/?>

Mais cela ne fonctionne plus. Spécialement parce que les guillemets qui s'y trouvent dans la chaîne même, et donc l'expression est "fermée prématurément", et j'ignore comment régler ça.


Dernière édition par Archas le Mar 2 Aoû 2011 - 20:37, édité 1 fois
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Ea Mar 2 Aoû 2011 - 20:35

Pourquoi ne pas utiliser la solution que j'ai donné qui fonctionne ?


En l'exécutant sur le forum de votre profil ( sans les templates modifiés ) :

Code:
$(function(){
  $("div.postbody").each(function(){
    $(this).after('<span class="total-lettres">Total : ' + $(this).text().length + ' lettres.</span>');
  });
});
Cela donne :

- https://i.imgur.com/Vx7Sl.png
- https://i.imgur.com/GsZgO.png
- https://i.imgur.com/7JoQ0.png
- https://i.imgur.com/39wet.png
- https://i.imgur.com/CmMpp.png
- https://i.imgur.com/X8BFQ.png
- https://i.imgur.com/9Y0qR.png
- https://i.imgur.com/XVcpw.png

Si vous ne voulez pas compter les retours à la ligne et espaces, alors il suffit de mettre :

Code:
$(function(){
  $("div.postbody").each(function(){
    $(this).after('<span class="total-lettres">Total : ' + $(this).text().replace(/\s/g,"").length + ' lettres.</span>');
  });
});
Sinon par :

Etana a écrit:Moi je mettrais ce script sur les pages de sujet
Je dis l'exécuter sur tout les sujets avec https://forum.forumactif.com/t308422-nouveaute-forumactif-gestion-des-codes-javascript sans avoir à modifier une template.


Dernière édition par Etana le Mar 2 Aoû 2011 - 20:42, édité 1 fois
Ea

Ea
Aidactif
Aidactif

Messages : 23583
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Mar 2 Aoû 2011 - 20:39

Où est-ce que je dois mettre cela, dans View_topicbody, exactement? au début? ou au milieu?

Edit: ah! Je vois Razz Merci! J'essaie de ce pas.


Dernière édition par Archas le Mar 2 Aoû 2011 - 20:43, édité 1 fois
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Ea Mar 2 Aoû 2011 - 20:42

Il n'y a pas besoin de modifier de template, il faut juste le mettre dans la gestion des codes javascript en cochant sur les sujets :
https://forum.forumactif.com/t308422-nouveaute-forumactif-gestion-des-codes-javascript

Ea

Ea
Aidactif
Aidactif

Messages : 23583
Inscrit(e) le : 04/04/2008

Ea a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Compteur de lettres, affiché sous le message.

Message par Archas Mar 2 Aoû 2011 - 20:57

Bon. Je l'ai installer, la première version, qui compte les espaces. C'est probablement un de mes template... mais bon. Ça me compte 500 lettres pour un message de trois lettres. silent

Edit: Je sais pourquoiiiiiiiiii c'est bon. Very Happy Merci!
Archas

Archas
Nouveau membre

Féminin
Messages : 23
Inscrit(e) le : 08/07/2011

http://blablatest.forum-canada.com
Archas a été remercié(e) par l'auteur de ce sujet.

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum