Les membres qui se sont connectés dans les 7 derniers jours

Comment indiquer quels sont les membres qui se sont connectés dans les 7 derniers jours ?
Ce filtre est surtout utile pour ceux qui utilisent le système d’authentification de SPIP (login_public+Logout) pour créer une partie privative réservée aux membres. Il permet ainsi de voir quels sont les membres qui sont venus sur le site et qui se sont identifiés !

Comment indiquer quels sont les membres qui se sont connectés dans les 7 derniers jours ?

Bonjour,

C’est suite à diverses demandes que j’ai pu lire dans le forum de Uzine que l’idée m’est venue de reprendre ce petit bout de code et répondre ainsi à la demande.

En fait la question originale était : comment faire pour permettre de montrer les personnes connectées récemment comme dans la partie privé ?

Ben, il suffit de reprendre le bout de code et de l’adapter. C’est ce que j’ai fait. Je n’ai donc aucun mérite sauf celui de le présenter ici.

Je tiens à remercier Fil, Ben et Ced pour leurs excellentes remarques et bonnes pistes qui m’ont permis d’en faire un filtre très propre.

Voici le code qu’il suffit de mettre dans le fichier mes_fonctions.php3 :

/*
 *   +---------------------------------------------+
 *    Nom du Filtre : membres récemment connectés
 *   +---------------------------------------------+
 *    Date : mercredi 09 avril 2003
 *    Auteur : Txia Lyfoung Email:txia@lyfoung.com
 *    site : http://lyfoung.com
 *   +---------------------------------------------+
 *    Fonctions de ce filtre :
 *     Permet de voir les personnes qui se sont 
 *     connectés récemment
 *     Appelez le dans vos squellette tout simplement
 *     par : [(#URL_SITE|nb_connect)]
 *   +---------------------------------------------+
 *  
 * Pour toute suggestion, remarque, proposition d'ajout
 * reportez-vous au forum de l'article :
 * http://www.uzine.net/spip_contrib/article.php3?id_article=94
 *
 */

function nb_connect($resultat){

global $table_prefix;
$query = "SELECT nom, en_ligne FROM ".$table_prefix."_auteurs WHERE (TO_DAYS(now())-TO_DAYS(en_ligne))<=7 ORDER BY en_ligne DESC";
$resultat = "";

$result_auteurs = spip_query($query);
$nb_connectes = spip_num_rows($result_auteurs);
$flag_cadre = ($nb_connectes > 0);

if ($flag_cadre) {
	$resultat.="<p>";
	if ($nb_connectes > 1) $resultat.="<u>Membres r&eacute;cents&nbsp;:</u>";
	else $resultat.="<u>Membre r&eacute;cent&nbsp;:</u>";
	while ($row = spip_fetch_array($result_auteurs)) {
		$nom_auteur = $row["nom"];
		$en_ligne = $row["en_ligne"];
		$resultat.="<br>$nom_auteur <span style='font-size:78%'> [ $en_ligne ]</span>";
	}
}
return $resultat;
}

// FIN du Filtre nb_connect

et ensuite de l’appeler dans votre squelette par :

<div class='spip_encadrer' style="font-size:80%">
[(#URL_SITE|nb_connect)]
</div>

La div est facultative. Elle permet simplement d’encadrer.

Bien sûr ma présentation peut être modifiée, car ici j’ai pris le parti de montrer les personnes « récemment » connectées (7 derniers jours).

On peut ainsi prendre le parti de montrer les personnes connectées depuis la (ou les x) dernière(s) heure(s) ou même minute(s), ou encore le mois en cours ...

Il faut modifier la partie de code :

$query = "SELECT nom, en_ligne FROM ".$table_prefix."_auteurs WHERE (TO_DAYS(now())-TO_DAYS(en_ligne))<=1 ORDER BY en_ligne DESC";

C’est le (TO_DAYS(now())-TO_DAYS(en_ligne))<=7 qu’il faut changer : Ici ça signifie date de connexion inférieure ou égale à 7 (soit 7 jours !)

Pour le mois en cours, il faudrait mettre (MONTH(now())-MONTH(en_ligne))=0, il me semble....

C’est un exemple. Je vous laisse le soin de consulter ce lien pour comprendre les commandes Mysql pour ces modifications.

J’avoue ne pas être un pro en ce domaine et avoir tatonné un peu avant d’arriver à mon résultat.

voir ce lien : Tout est facile, SQL

La version, en fonctionnement sur mon site test @Lyfoung Test en SPIP v1.5.2 et mon site de production @Lyfoung en v1.6b6, présente les membres qui se sont identifiés les deux derniers jours et durant le mois en cours.

J’espère que cette contrib interressera quelques-uns.

@+

Discussion

5 discussions

  • 4

    Malheureusement, chez moi, avec ce script, les visiteurs apparaîssent uniquement s’ils ont pris la peine de se déconnecter. S’ils se contentent de fermer leur navigateurs, tintin... Le champ « en_ligne » de la table « auteurs » n’est pas mis à jour et alors on ne les voit pas dans la liste. Si quelqu’un a la solution pour qu’un visiteur soit comptabilisé au moment où il se connecte, je suis preneur !

    • Moi aussi je suis preneur !

      Merci pour ce script

    • Merci pour cette idée de filtre bien sympa.

      Mais :

      En fait le champ en_ligne ne convient pas. On se rend vite compte que certaines personnes se connectent et pourtant leur champ reste toujours à 0.
      Pourquoi ?

      La solution est d’utiliser le champ « maj » dans le filtre au lieu de « en_ligne ».

      Jérôme

    • Très bien ce script !
      Mais je ne suis pas un craque du PHP. "Remplacer le champ « en_ligne » par le champ « maj » dans le filtre... euh ?
      Peut-on m’indiquer quel champ exactement ? Merci encore

    • Je l’utilise avec bonheur... Pour que le log en base de donnée se fasse depuis l’espace public, en 1.9 j’ai ajouté ceci :

      include_spip('inc/auth');
      inc_auth_dist();

      Juste après les premières lignes de la fonction qui sont :

      global $table_prefix;
      global $auteur_session;

      Après, avec un cache court (300, par ex.), on a un tableau mis à jour régulièrement...

    Répondre à ce message

  • 1

    Attention, pour que cette contrib fonctionne, il faut remplacer $table_prefix par $GLOBALS[’table_prefix’]

    • En fait spip_query() se charge d’appliquer le bon préfixe ; il serait possible de simplifier la contrib sur ce point, en mettant spip_auteurs dans la requête.

    Répondre à ce message

  • Merci pour ce script, ca marche bien.. !

    Répondre à ce message

  • asso.bachant

    Voici le code qu’il suffit de mettre dans le fichier mes_fonctions.php3

    (#URL_SITE

    Répondre à ce message

  • Jean-Claude

    Très intéressant pour un site dynamique B-)

    J’aimerais pouvoir afficher la date sous une forme différente, p ex. mardi 5 mai 2003 10:30 mais je ne trouve pas le moyen de le faire dans la page indiquée en référence. Les critères SPIP ne sont pas utilisables a priori. Que faire ???

    Répondre à ce message

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