Compter les visiteurs connectés

Une fonctionnalité du Couteau Suisse qui compte simplement le nombre de visiteurs connectés au même moment.

Présentation

Cet outil est une fonctionnalité du plugin Le Couteau Suisse que vous pouvez trouver ici : Le Couteau Suisse. Pour avoir accès aux fonctionnalités décrites dans cet article, il vous faut donc avoir préalablement installé ce plugin.

Ensuite, une fois l’outil Affichage public > Visiteurs connectés activé sur la page d’administration du plugin en espace privé, vous avez donc la possibilité d’afficher n’importe où dans votre squelette le nombre de visiteurs connectés en même temps.

Le principe est très simple : il consiste à compter le nombre de fichiers présents dans le dossier tmp/visites/, équivalent au nombre de visiteurs présents sur votre site. Il me semble que SPIP conserve le fichier d’un visiteur pendant 30 minutes.

Pour que la noisette fonctionne, veillez que les statistiques soient bien activées dans votre site (SPIP privé : Configuration > Fonctions Avancées > Statistiques).

Notez le travail similaire effectué précédemment dans un plugin autonome par phil : Nombres de visiteurs connectés. Voici le code très simple du filtre réutilisé ici :

function cs_compter_visiteurs(){
   return count(preg_files(_DIR_TMP.'visites/','.')); 
}

Utilisation

A l’instar de toutes les noisettes [1] SPIP, ajoutez simplement l’expression dynamique <INCLURE{fond=fonds/visiteurs_connectes}> dans votre squelette, une fois que l’outil a été activé.

L’avantage d’utiliser un INCLURE à chevrons est l’indépendance des caches. Pour obtenir un résultat en temps presque réel, il faut en effet un cache plus court au fragment inclu (60 secondes par défaut) qu’à la page elle-même (24 heures le plus souvent).

Comme expliqué sur cette page :

<INCLURE{fond=..}> et [(#INCLURE{fond=..})] ont des fonctionnements différents :
-  avec <INCLURE{fond=..}>, chaque squelette inclus a un cache indépendant ;
-  avec [(#INCLURE{fond=..})], la page principale appelante contient, en cache, l’intégralité du code généré, et les fichiers inclus n’ont pas de cache séparé.

La noisette [1] en détail

Le fond HTML utilisé par le plugin est : fonds/visiteurs_connectes.html. Il contient trois paramétrages : le cache (durée en secondes), le paragraphage (oui/non) et la chaine de langue utilisée.

Voici le code natif de ce fond (au 25/02/2010) :

#CACHE{#ENV*{cache,60}}
[(#VAL{_CS_visiteurs_connectes}|defined|oui)
#SET{nb,#REM|filtrer{cs_compter_visiteurs}|cs_span{class='cs_nb_visiteurs'}}
#SET{ch,couteau:visiteurs_connectes}
[(#VAL{visiteurs_connectes}|_T|=={visiteurs connectes}|non)#SET{ch,visiteurs_connectes}]
[[(#ENV*{p,1}|oui)<p class='cs_visiteurs'>](#GET{ch}|_T{#ARRAY{nb,#GET{nb}}})[(#ENV*{p,1}|oui)</p>]]
]

Le cache est fixé sur la première ligne à 60 secondes, sauf si une autre valeur cache a été trouvée dans l’INCLURE. Exemple désactivant totalement le cache : <INCLURE{fond=fonds/visiteurs_connectes}{cache=0}>

Sur la 2e ligne, on commence par vérifier que l’outil « Affichage public > Visiteurs connectés » est bien activé grâce à : (#VAL{_CS_visiteurs_connectes}|defined|oui)

Puis, on initialise la variable nb grâce à la fonction cs_compter_visiteurs() et insère le nombre produit d’un <span class=’cs_nb_visiteurs’>, histoire de permettre par exemple de le styliser par CSS. Notez au passage que SPIP 2.1 exige qu’un filtre soit toujours connu. Hors, si l’outil est inactif, la fonction cs_compter_visiteurs n’est pas définie et le compilateur n’est pas content. La solution est donc de passer par |filtrer.

Ensuite, on recherche la chaine de langue ’visiteurs_connectes’ stockée dans la variable ch. Si cette chaine n’est pas trouvée, alors celle du Couteau Suisse sera utilisée : ’Visiteurs connectés : @nb@’. Notez que cette chaine doit obligatoirement contenir la séquence @nb@ afin que le plugin puisse y insérer le nombre de visiteurs. Pour utiliser votre propre chaine de langue, passez par les fichiers personnalisés dossier_de_mon_squelette/lang/local_XX.php (où XX représente la langue en question) et insérez par exemple la ligne suivante :

'visiteurs_connectes' => 'Il y a @nb@ visiteurs connect&eacute;s en ce moment.',

Voici le rendu HTML français obtenu par défaut :

  1. <p class='cs_visiteurs>Visiteurs connectés : <span class='cs_nb_visiteurs'>25</span></p>

Pour éviter l’insertion du paragraphe, alors il faut ajouter le paramètre {p=0} dans l’INCLURE. Par exemple : <INCLURE{fond=fonds/visiteurs_connectes}{p=0}>

Voici ce que devient le rendu HTML dans ce cas :

  1. Visiteurs connectés : <span class='cs_nb_visiteurs'>35</span>

Surcharge du fond

Si ce fond ne vous convient pas, il vous suffit alors de recopier le fichier correspondant dans votre squelette (dossier_de_mon_squelette/fonds/visiteurs_connectes.html) puis de le modifier à votre guise.

Exemple : il est tout à fait possible de le réduire au minimum, un simple nombre sans cache :

  1. #CACHE{0}[(#REM|cs_compter_visiteurs)]

Bonus

Un petit gadget a été ajouté à cet outil. L’URL spip.php ?action=visiteurs_connectes vous permettra de récupérer directement le nombre de visiteurs connectés, ça peut toujours servir, notamment en JavaScript.

Vous souhaitez par exemple une mise à jour dynamique toutes les 15 secondes ? Voici le code jQuery :

function Timer_visiteurs_connectes(){
	jQuery("span.cs_nb_visiteurs")
		.load("spip.php?action=visiteurs_connectes");
	setTimeout("Timer_visiteurs_connectes()",15000);					
}
jQuery(document).ready(function(){
	if(jQuery("span.cs_nb_visiteurs").length)
		Timer_visiteurs_connectes();
});

Attention, ceci est un cas d’école... Votre serveur risque de ne pas supporter autant de hits en si peu de temps !!!

Notes

[1terme habituellement utilisé pour nommer un fragment de squelette SPIP (fichier .html)

Dernière modification de cette page le 2 juillet 2011

Discussion

6 discussions

  • 1
    Julien

    Bonjour,

    est-il possible dans l’inclure, de récupérer les noms des visiteurs connectés ?

    Merci par avance.

    Julien

    • Salut,

      Heu, non ce n’est pas possible puisque les visiteurs connectés correspondent aux visiteurs qui passent sur le site et non ceux qui y sont inscrits. Visiter un site, c’est s’y connecter via un navigateur, rien à voir avec une inscription et autres connexions internes au site lui-même.
      J’ai aussi tendance à faire erreur dans le jargon utilisé, pas facile lorsque l’on est novice.
      Bonne journée.

    Répondre à ce message

  • Bonjour,

    Après mise à jour de la v1.9.7 à v1.9.8, et après avoir suivi les instructions « Dysfonctionnements »,
    pas d’affichage du nombre des visiteurs connectés.
    De plus j’ai changé dans le fichier lang fr du couteau, 'visiteurs connectés : @nb@' pour 'Ravers On @nb@', cela fonctionnait bien jusqu’à la mise à jour, là, le inclure continue de m’indiquer « visiteurs connectés » (sans le nombre).
    Suite à vos indications ci-dessus, j’ai créé un fichier local_fr dans lang/, copié visiteurs_connectes dans modeles/, mis <INCLURE{fond=modeles/visiteurs_connectes}{p=0}> sur ma page stats, vidé les caches internet et spip, et il n’y a que « visiteurs connectes » qui s’affiche alors que sur les fichiers lang fr, ce n’est plus cela.

    Pourquoi le nombre se s’affiche plus, le bon énoncé non plus et d’où cela vient, le plugin ou une mauvaise manip de ma part ?

    Merci d’avance,
    Cordialement

    Répondre à ce message

  • salut à tous et toutes ;
    j’ai essayé avec la version 3 ça marche bien mais quand tenter avec un de mes sites conçu avec la version 2 de spip, ça ne marche pas, il écrit (visiteurs connectes) et en haut "Erreur : filtre « visiteurs_connectes_compter » non défini".
    Merci pour votre considération ! ( voici le site new.greatmali.net)

    Répondre à ce message

  • 8

    il consiste à compter le nombre de fichiers présents dans le dossier tmp/visites/, équivalent au nombre de visiteurs présents sur votre site.

    Je n’ai pas de dossier de ce nom dans /tmp (SPIP 2.1 SVN). Est-ce qu’il faut activer les statistiques de SPIP pour que cela marche ? Ou s’agit-il d’autre chose ?

    • Bonjour,

      idem (en configuration de test local sur mon disque dur) SPIP 2.1.10 Version locale : 1.8.41.03
      Révision : 49007
      alors que la précédente version marche.
      Il n’y a pas de dossier visites dans tmp/
      J’en ai mis un, cela ne change rien.

      J’ai essayé aussi (#INCLUREfond=fonds/visiteurs_connectes...
      idem

      Une idée ? Merci

    • Bonjour.

      Pour que cette lame fonctionne sur un SPIP 2.1 et que le dossier tmp/visites/ soit effectivement créé, il faut que les statistiques soient actives (plugin statistiques). Est-ce bien le cas ?

      Peut-être faudrait-il que le CS palie à une absence éventuelle de ce plugin... Le code n’est pas très lourd, qu’en pense le lecteur ?

    • Re bonjour,
      Merci de votre réponse rapide.

      Effectivement, je suis en train de tester en local, le passage à SPIP2.1.10 ainsi que la mise à jour de tous les plugins. J’aurais dû mieux comparer la config avec celle de mon site :-(
      J’ai tout simplement oublié d’activer les statistiques (SPIP privé : Configuration > Fonctions Avancées > Statistiques). Au temps pour moi.

      Quand à charger CS de se substituer au défaut d’activation des statistiques ce n’est peut-être pas nécessaire ? On pourrait se contenter de signaler dans la description de la lame qu’il faut activer les Stat.

      En tout cas merci encore et bravo pour le CS et la réactivité
      .

    • Merci de votre réponse rapide.

      En effet... après seulement 13 mois ;)

      Pour ma part, je tiens à ne pas activer les statistiques SPIP qui ne me sont pas nécessaire et qui feraient rallentir le site. Si le CS inclut le code nécessaire avec moindre coût de vitesse au site, alors je l’utiliserai.

    • En effet... après seulement 13 mois ;)

      Non non Paolo, Je viens de poster ma demande. :-)

      Cela dit je me pose le question. Pourquoi ne pas compter plutôt le nombre de fichiers présents dans « sessions » si cela peut répondre à un besoin de connaitre le nombre de personnes connectées en temps réel ?

      Lors de mes tests en local, le CS compte 4 visiteurs connectés alors qu’il n’en reste plus qu’un seul. Les sessions sont maj de façon plus réactive. Du moins il me semble (je n’ai plus que 1 fichier de session) et toujours 4 « visiteurs connectés »

    • SPIP s’arrange pour maintenir le dossier tmp/visites/ pendant 30 minutes. CRON s’occupe de ça : du coup c’est à peu près 30 minutes, le temps exact n’est pas fondamental.

      @mybeau : as-tu étudié la façon dont les sessions fonctionnent ? Je viens de regarder et j’ai des sessions datées de 2010... Sur un site où il y a actuellement 5 connectés, j’ai 50 fichiers de session !

      @Paolo : oups, j’avais pas dû voir passer ton message !

      @Paolo : oui le code serait minimal, a priori 2 fichiers du plugin statistiques semblent suffire pour renseigner sur les visiteurs connectés, celui qui gère le dossier tmp/visites à chaque hit et celui qui surveille les 30 minutes (genie).

    • Ah ?

      J’ai un dossier sessions hyperclean..... Mais je sais pas dire pquoi.
      Pourtant j’ai pas mal d’assoc. qui rentrent pour créer leurs articles.
      Depuis 2010 il aurait du y en avoir un certain nombre.. ?
      De plus j’ai « vu » des fichiers de session disparaître sous mon nez si j’ose dire.....
      C pas grave comme je l’ai dit.

      Je ne vois pas d’inconvénient aux statistiques (pour moi et dans mon cas de figure)
      On me les demanderait s’il n’y en avait pas. (Comme on est censé en avoir personne ne demande ... of course.)

      statistiques est un plugin ?
      sans doute un de ceux ajoutés systématiquement par SPIP ?

    • SPIP 2.1 possède encore des statistiques en core, il faut juste les activer. C’est SPIP 3 qui les a déportées en extension...

      La lame prévient désormais s’il y a un problème d’activation ;-)

    Répondre à ce message

  • 4
    aldebaran1976

    Bonjour,

    je dois être extrêmement bête (ou extrêmement débutant) mais j’aimerais comprendre ce que veut dire ceci :

    A l’instar de toutes les noisettes [1] SPIP, ajoutez simplement l’expression dynamique visiteurs_connectes}> dans votre squelette, une fois que l’outil a été activé.

    Que veut dire « insérer dans un squelette » : faut-il uploader un fichier particulier, l’ouvrir avec le notepad et insérer cette ligne de code n’importe où dans le texte ?

    • Salut,

      Oui, il faut bien éditer un des fichiers du squelette et ajouter l’expression d’inclusion que tu cites.

    • aldebaran1976

      Merci,

      mais alors, le problème est : quel fichier remodeler ? (je suppose que çà doit être celui générant la page sur laquelle on veut faire afficher le compteur des visites... index.php par exemple ? si on veut faire apparaitre le compteur sur la page d’accueil ?)... ou alors un autre fichier du squelette. Mais de quel squelette parle-t-on ? celui de la distribution ou ceux que l’on peut ajouter par FTP dans le répertoire /squelettes/ sachant que si j’ai bien compris, les versions les plus récentes de spip ont tendance à utiliser de moins en moins ce répertoire /squelettes/ et utilisent plutôt des plugins.

      Je sais que çà fait beaucoup de questions mais j’aimerais comprendre.

      D’avance merci !

    • Tous les fichiers copiés dans squelettes/ seront prioritaires par rapport aux autres. Donc n’hésitez pas à y copier les vôtres et à les modifier comme bon vous semble ;-)

      Il s’agit bien sûr de fichiers html, la page d’accueil étant : sommaire.html.

    • Merci,

      c’est maintenant clair comme de l’eau de roche !!!

    Répondre à ce message

  • 1

    Pourquoi tant de colère ? Un ami m’a dit un jour :
    « Le côté obscur de la Force, redouter tu dois. »

    Il est vrai que j’ai du mal à identifier les singularités de cette contrib qui permettraient de justifier sa coexistence avec l’autre...

    En même temps, le couteau suisse, dans son principe (rassembler un max d’outil en 1 plugin), me facilite bien la vie...

    Salomon conclurait ainsi : « Il faut que le couteau suisse soit ouvert à tous les contributeurs de la communauté ! Au lieu d’y ajouter toujours plus de fonctionnalités, Patrice devrait le rendre plus modulaire et plus ouvert. »

    Peace and love...

    • A propos de la modularité du Couteau Suisse, celui-ci accepte les outils en plusieurs formats :
      -  variable globale définie dans config/mes_options.php
      -  fichier de config de type outils/mon_outil_config.php
      -  fichier de config de type outils/mes_outils_config.xml
      -  + des fichiers distants afin d’éviter la duplication des codes.

      A propos de la contribution décrite ci-dessus et sujet à cette trop longue discussion pour du code trop simpliste, j’aimerais rappeler qu’il s’agit d’une fonction d’une ligne !!

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom