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 :

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

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 :

#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)

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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