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 !!!

Footnotes

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

updated on 2 October 2019

Discussion

3 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.

    Reply to this 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

    Reply to this 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)

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom