Plugins - Statistiques
Bonjours,
Voici un petit plugins qui permets d'afficher le nombre de visites et les pages vues sur votre blog.

A dé-zipper dans le dossier plugins préalablement créé.
L'installation et commenté dans le fichier counter.php (le seul ^^)
A voir par la suite pour afficher le résultat plus proprement avec une fonction global.
Testé sur Pluxml beta 4.2.
Pour le tester: statistiques.zip - 3Ko
Voici un petit plugins qui permets d'afficher le nombre de visites et les pages vues sur votre blog.

A dé-zipper dans le dossier plugins préalablement créé.
L'installation et commenté dans le fichier counter.php (le seul ^^)
A voir par la suite pour afficher le résultat plus proprement avec une fonction global.
Testé sur Pluxml beta 4.2.
Pour le tester: statistiques.zip - 3Ko
0
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Ton script présente quelques inconvénients:
les statistiques sont sauvegardées dans 4 fichiers différents. Ce qui implique 4 lectures + 4 écritures, soit 8 accès à des fichiers. On peut très facilement optimiser tout ça en seulement 1 lecture et 1 écriture.
En plus XML est là pour nous aider.
Je te propose de tester le script suivant. Il est codé dans le style "pluxml" et utilise les ressources disponibles de pluxml.
Pour l'installer
1) Créer un dossier plugins à la racine du pluxml
2) Dans le dossier plugins créer un dossier stats
3) Créer dans ce dossier un fichier stats.php et coller dedans le code ci dessous
<?php /** * Classe plxStats * * @version 1.0 * @package PLX * @author Stephane F **/ class plxStats { var $filename = null; # nom du fichier contenant les statistiques var $aStats = array(); # données statistiques var $sessionTime = 15; # durée d'une visite en minute vant expiration /** * Constructeur qui initialise certaines variables de classe * et qui lance les traitements de prise en compte des statistiques * * @param null * @return null * @author Stephane F **/ function plxStats() { $this->filename = PLX_ROOT.'plugins/stats/stats.xml'; # emplacement du fichier des stats $this->_getStatiques($filename); # récuperation des stats $this->_cleanVisits(); # suppression des anciens visiteurs $this->_addVisitor(); # ajoute le nouveau visiteur et gère les compteurs $this->_editStats($filename); # sauvegarde des stats } #------------------ # Méthodes privées #------------------ /** * Méthode qui parse le fichier des statistiques et qui alimente * le tableau aStats * * @param null * @return null * @author Stephane F **/ function _getStatiques() { if(!is_readable($this->filename)) return; # Mise en place du parseur XML $data = implode('',file($this->filename)); $parser = xml_parser_create(PLX_CHARSET); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0); xml_parse_into_struct($parser,$data,$values,$iTags); xml_parser_free($parser); # Recuperation des valeurs de nos champs XML $this->aStats['views_today'] = array( // total de pages vues aujourd'hui 'date' => (isset($values[ $iTags['views_today'][0] ]['attributes']['date'])?$values[ $iTags['views_today'][0] ]['attributes']['date']:date('Ymd')), 'counter' => (isset($values[ $iTags['views_today'][0] ]['value'])?intval($values[ $iTags['views_today'][0] ]['value']):0) ); $this->aStats['views_total'] = isset($values[ $iTags['views_total'][0] ]['value'])?intval($values[ $iTags['views_total'][0] ]['value']):0; // total de pages vues $this->aStats['visitors'] = isset($values[ $iTags['visitors'][0] ]['value'])?intval($values[ $iTags['visitors'][0] ]['value']):0; // nombre total de visiteurs # On verifie qu'il existe des tags "online" if(isset($iTags['online'])) { # On compte le nombre de tags "online" $nb = sizeof($iTags['online']); # On boucle sur $nb for($i = 0; $i < $nb; $i++) { $this->aStats['online'][ $values[ $iTags['online'][$i] ]['attributes']['ip'] ] = $values[ $iTags['online'][$i] ]['value']; } } } /** * Méthode qui sauvegarde les statistiques dans le fichier xml * le tableau aStats * * @param null * @return null * @author Stephane F **/ function _editStats() { # Début du fichier XML $xml = "<?xml version='1.0' encoding='".PLX_CHARSET."'?>\n"; $xml .= "<document>\n"; $xml .= "\t<views_today date=\"".$this->aStats['views_today']['date']."\">".$this->aStats['views_today']['counter']."</views_today>\n"; $xml .= "\t<views_total>".$this->aStats['views_total']."</views_total>\n"; $xml .= "\t<visitors>".$this->aStats['visitors']."</visitors>\n"; if ($this->aStats['online']) { foreach($this->aStats['online'] as $ip => $time) { $xml .= "\t<online ip=\"".$ip."\">".$time."</online>\n"; } } $xml .= "</document>"; # Sauvegarde du fichier plxUtils::write($xml, $this->filename); } /** * Méthode qui supprime les anciens visiteurs si la durée de la visite * est expirée * * @param null * @return null * @author Stephane F **/ function _cleanVisits() { if ($this->aStats['online']) { foreach($this->aStats['online'] as $ip => $time) { if(time() - $time >= $this->sessionTime * 60) unset($this->aStats['online'][$ip]); # suppresion de l'ancien visiteur } } } /** * Méthode qui ajoute un nouveau visiteur et qui incrémente les différents * compteurs de statistiques * * @param null * @return null * @author Stephane F **/ function _addVisitor() { if (isset($this->aStats['online'][plxUtils::getIp()])) { if (time() - $this->aStats['online'][plxUtils::getIp()] >= $this->sessionTime * 60) { $this->aStats['online'][plxUtils::getIp()] = time(); $this->aStats['visitors']++; } } else { $this->aStats['online'][plxUtils::getIp()] = time(); $this->aStats['visitors']++; } # nombre de visiteurs du jour if ($this->aStats['views_today']['date'] == date('Ymd')) $this->aStats['views_today']['counter']++; else { $this->aStats['views_today']['date'] = date('Ymd'); $this->aStats['views_today']['counter']=1; } # nombre total de pages vues $this->aStats['views_total']++; } #------------------- # Méthodes publiques #------------------- /** * Méthode qui affiche le compteur du nombre total de visiteurs * * @param null * @return stdout * @author Stephane F **/ function TotalVisitors() { echo $this->aStats['visitors']; } /** * Méthode qui affiche le compteur du visiteurs en ligne * * @param null * @return stdout * @author Stephane F **/ function OnlineVisitors() { echo sizeof($this->aStats['online']); } /** * Méthode qui affiche le compteur du nombre de pages vues aujourd'hui * * @param null * @return stdout * @author Stephane F **/ function TodayViews() { echo $this->aStats['views_today']['counter']; } /** * Méthode qui affiche le compteur du nombre total de pages vues * * @param null * @return stdout * @author Stephane F **/ function TotalViews() { echo $this->aStats['views_total']; } } #----------------------------------------------- # création d'une instance de la classe plxStats #----------------------------------------------- $plxStats = new plxStats(); ?>4) Éditer le fichier header.php du thèmeEn dessous de la ligne
<?php if(!defined('PLX_ROOT')) exit; ?>Ajouter 5) Pour afficher les statistiques coller le code ci-dessous par exemple dans le fichier sidebar.php du thème Je n'ai pas le temps de tester à fond ce script, donc s'il y a des erreurs ou des aménagements, ne pas hésiter à en parler ici.Stéphane
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Voici l'erreur générée:
J'ai enlevé chaque ligne qui affiche chaque stats dans la sidebar jusqu'à afficher la dernière et il en retourne à chaque fois un Fatal error: Call to a member function LAVARIABLE() on a non-object in
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Tu peux stp me zipper ton pluxml modifié que je regarde en me l'envoyant à stephane @ pluxml.org
Merci
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Du coup ca marche super bien et le code et bien plus propre c'est sur.
Encore merci.
Juste une question, dans un autre topic j'avais demandé si la gestion des plugins à étais étudié, elle l'est ?
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
J'ai une Pluxml blog beta 4 - ça va marcher aussi ?
D'avance merci
ça devrait fonctionner oui.
Stéphane
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Super, je vais essayer
J'ai cherché dans mon header.php et je trouve pas de PLX_ROOT. Une idée ? Ci dessous le fichier en question. Merci
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title><?php $plxShow->pageTitle(); ?></title> <meta http-equiv="Content-Type" content="text/html; charset=<?php $plxShow->charset(); ?>" /> <link rel="stylesheet" type="text/css" href="<?php $plxShow->template(); ?>/style.css" media="screen" /> <link rel="alternate" type="application/atom+xml" title="Atom articles" href="./feed.php?atom" /> <link rel="alternate" type="application/rss+xml" title="Rss articles" href="./feed.php?rss" /> <link rel="alternate" type="application/atom+xml" title="Atom commentaires" href="./feed.php?atom/commentaires" /> <link rel="alternate" type="application/rss+xml" title="Rss commentaires" href="./feed.php?rss/commentaires" /> </head> <body> <div id="top"> <div id="menu"> <ul><?php $plxShow->staticList('Home page / Accueil'); ?></ul> <div class="clearer"></div> </div> <div id="header"> <div class="logo"> <h1><?php $plxShow->mainTitle('link'); ?></h1> <p><?php $plxShow->subTitle(); ?></p> </div> </div> </div><?php if(!defined('PLX_ROOT')) exit; include_once(PLX_ROOT.'/plugins/stats/stats.php'); ?>Au dessus de :Tu aura donc ton PLX_ROOT en haut de ton header.
C'est juste une fonction qui interdit l'appelle directe du fichier (via le navigateur par exemple).
Merci Loup-des-Neiges pour l'explication
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Cela marche à condition de bien mettre la page stats.php dans le répertoire plugins/stats
Or dans le post #2, c'est écrit : "2) Créer dans ce dossier un fichier stats.php et coller dedans le code ci dessous"
Si c'était rectifiable en "2) Créer dans ce dossier un sous dossier stats puis un fichier stats.php et coller dedans le code ci dessous"
D'où confusion...
A+
Effectivement c'est une erreur de ma part dans la procédure. J'ai oublié de mentionner l'étape de création du dossier stats.
J'ai corrigé la procédure d'installation dans le post #2
Merci
Stephane
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Question, est ce que je peux coller ce code dans une page normale ou sinon dans une page statique ? J'ai fait quelques essais mais je n'ai pas trouvé comment faire pour que ça marche...
D'avance merci
Pour une page normal, non (le php n'est pas interprété dans les pages normales).
Pour une page statique essaye en rajoutant au début de ta page statique, la ligne suivante
(à vérifier si ça marche - pas sur...)
Stéphane
Consultant PluXml
Ancien responsable et développeur de PluXml (2010 à 2018)
Super, ça marche, merci !
J'ai rajouté mon site dans mon profil : vous pouvez aller jeter un oeil :rolleyes:
bravo pour ce petit plugin que j'utilise également .
J'affiche le nombre de visiteurs en ligne en bas de page, dans le footer, ' x visiteurs en ligne'.
Je voulais donc que le mot 'visiteur' puisse être mis au singulier dans le cas d'un seul visiteur ;o)
J'ai donc un peu modifié la fonction OnlineVisitors() ainsi:
function OnlineVisitors() { global $nbtemp; echo sizeof($this->aStats['online']); if (sizeof($this->aStats['online']) <= 1){$nbtemp = "";} else {$nbtemp = "s";} }A l'endroit où j'affiche les visiteurs en ligne, le mot 'visiteur' est ainsi affiché: Ca fonctionne bien, le 's' s'ajoute à partir de deux visiteurs, cool, non ? ;o).Cordialement,
Ludo
Pour ma part j'ai suivi le tuto et ajouté dans mon footer mais je préférais avoir l'accord au pluriel
Pour la partie footer, je pense que tu peux concaténer tout ça en écrivant (non testé): Cordialement,
Ludo
ps: voilà ce que ça donne sur mon petit blog en construction
(edit: heureusement qu'on peut modifier les messages... pour corriger les erreurs de bb et les fautes !
J'ai apprécié les onglets dans l'article sur le simulateur de vol : comment tu as fait ça ?
Sinon, bravo à toute l'équipe de PluXML - on fait vraiment des beaux sites avec. Faut juste le faire savoir.
La description est sous le lien ci-dessus et si tu télécharges le fichier, tu trouveras un mode d'emploi que j'espère avoir fais le plus clair possible. Sinon, le principe est de scinder un article en plusieurs 'pages' en plaçant le contenu de chacune dans un bloc div. Les onglets sont générés dynamiquement en js. Le bloc div montré est celui de la page choisie. La page fait donc toujours la même taille physiquement mais sa présentation est découpée en pages.
Cordialement,
Ludo
Depuis, je m'héberge tout seul (Synology) et c'est beaucoup mieux.
J'ai un PluXML blog beta 4, j'ai téléchargé et je vais tester - mais pas tout de suite
Merci et A+
Il a tendance à repartir à zéro tout seul apparemment et assez régulièrement. Il semble que ce soit lorsqu'il y a plusieurs visiteurs simultanément en ligne.
Il avait pourtant dépassé les 140 je crois mais j'étais à peu près le seul à le visiter.
Est-ce un 'bug' ou est-ce dû à mon hébergeur (on ne sait jamais... avec Free)
Cordialement,
Ludo
Comme je suppose qu'il s'agit d'un défaut d'écriture vidant le fichier ou le mettant à zéro, j'aimerais ainsi vérifier que cela ne se produit pas aussi avec celui-ci.
Je remonterai le résultat ici dans quelques temps (histoire de lever le doute de l'hébergeur).
Cordialement,
Ludo
J'ai donc ceci dans mon footer : pour autant cela me donne : 3 visiteur connecté (pas de pluriel) :-/
Voici le code que j'ai personnellement ajouté dans le footer :
<?php $plxStats->TotalVisitors(); // nombre de visiteurs total echo " visiteurs | "; $plxStats->OnlineVisitors(); //nombre de visiteurs en ligne echo " visiteur".$nbtemp; // j'ajoute un 's' si la valeur du compteur est supérieure à 1 echo " en ligne "; ?>Si la fonction OnlineVisitors() du fichier plugins/stats/stats.php a bien été modifiée comme indiqué précédemment, ça doit fonctionner.Dans le code ci-dessus, les deux première lignes correspondent à l'affichage du nombre total de visiteur et peuvent être supprimées.
J'ai rencontré un autre soucis: Le compteur du total des visiteurs s'est remis à zéro plusieurs fois en quelques jours. Du coup, je teste un autre compteur (plus simple avec un fichier texte) car j'ai un doute sur mon hébergeur.
J'espère que ça fonctionnera pour toi,
Cordialement,
Ludo