PluXml.org

Blog ou CMS à l'Xml

Vous n'êtes pas identifié(e).

#1 22/11/2009 10:42:20

Frédéric
Membre
Inscription : 03/06/2009
Messages : 2 533

Plugins - Statistiques

Bonjours,

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

091122095047737785.png

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

Dernière modification par mouffin (22/11/2009 10:44:13)

Hors ligne

#2 22/11/2009 15:26:12

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 190
Site Web

Re : Plugins - Statistiques

Bonjour mouffin

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ème

En dessous de la ligne

<?php if(!defined('PLX_ROOT')) exit; ?>

Ajouter

<?php include_once(PLX_ROOT.'plugins/stats/stats.php'); ?>

5) Pour afficher les statistiques coller le code ci-dessous par exemple dans le fichier sidebar.php du thème

	<h2>Statistiques</a></h2>
	<ul>
		<li>Total des pages vues: <?php $plxStats->TotalViews() ?></li>
		<li>Pages vues aujourd'hui:  <?php $plxStats->TodayViews() ?></li>
		<li>Visiteurs connectés: <?php $plxStats->OnlineVisitors() ?></li>
		<li>Nombre de visiteurs: <?php $plxStats->TotalVisitors() ?></li>
	</ul>

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


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#3 22/11/2009 21:01:14

Frédéric
Membre
Inscription : 03/06/2009
Messages : 2 533

Re : Plugins - Statistiques

Merci Stéphane de t'être penché sur ce plugins.

Voici l'erreur générée:

Total des pages vues:
Fatal error: Call to a member function TotalViews() on a non-object in /Applications/MAMP/htdocs/pluxml/themes/newspro/sidebar.php on line 15

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

Hors ligne

#4 22/11/2009 21:48:47

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 190
Site Web

Re : Plugins - Statistiques

As-tu bien ajouter la ligne suivante dans le header.php de ton thème

<?php include_once(PLX_ROOT.'plugins/stats/stats.php'); ?>

Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#5 22/11/2009 22:38:58

Frédéric
Membre
Inscription : 03/06/2009
Messages : 2 533

Re : Plugins - Statistiques

Oui tout a fais, tu as eu le temps de tester de ton coté ?

Hors ligne

#6 22/11/2009 22:52:01

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 190
Site Web

Re : Plugins - Statistiques

Je n'ai aucun problème d'affichage de mon coté.

Tu peux stp me zipper ton pluxml modifié que je regarde en me l'envoyant à stephane @ pluxml.org

Merci


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#7 23/11/2009 00:24:03

Frédéric
Membre
Inscription : 03/06/2009
Messages : 2 533

Re : Plugins - Statistiques

Ok Stéphane j'ai trouvé mon erreur, je n'avais pas créé de dossier stats, ce qui fais que stats.php étais directement dans plugins/ ^^

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 ?

Hors ligne

#8 23/11/2009 09:15:04

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 190
Site Web

Re : Plugins - Statistiques

Oui c'est en étude.


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#9 24/11/2009 00:05:40

zorn
Membre
Inscription : 20/04/2008
Messages : 122
Site Web

Re : Plugins - Statistiques

Bonsoir,

J'ai une Pluxml blog beta 4 - ça va marcher aussi ?
D'avance merci

Hors ligne

#10 24/11/2009 09:17:59

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 190
Site Web

Re : Plugins - Statistiques

Bonjour zorn

ça devrait fonctionner oui.

Stéphane


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#11 24/11/2009 21:19:50

zorn
Membre
Inscription : 20/04/2008
Messages : 122
Site Web

Re : Plugins - Statistiques

Merci Stéphane.

Super, je vais essayer smile

Hors ligne

#12 24/11/2009 21:27:08

zorn
Membre
Inscription : 20/04/2008
Messages : 122
Site Web

Re : Plugins - Statistiques

Bonsoir,

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>

Hors ligne

#13 24/11/2009 21:57:24

Loup-des-Neiges
Membre
Lieu : P.A.C.A (06)
Inscription : 23/12/2008
Messages : 39
Site Web

Re : Plugins - Statistiques

Rajoute :

<?php if(!defined('PLX_ROOT')) exit;
include_once(PLX_ROOT.'/plugins/stats/stats.php'); ?>

Au dessus de :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

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

Dernière modification par Loup-des-Neiges (24/11/2009 21:59:25)

Hors ligne

#14 24/11/2009 22:15:39

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 190
Site Web

Re : Plugins - Statistiques

Tout est dit.
Merci Loup-des-Neiges pour l'explication


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#15 24/11/2009 23:01:51

zorn
Membre
Inscription : 20/04/2008
Messages : 122
Site Web

Re : Plugins - Statistiques

Merci.
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+

Hors ligne

#16 25/11/2009 09:26:18

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 190
Site Web

Re : Plugins - Statistiques

Bonjour zorn

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


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#17 15/12/2009 21:22:59

zorn
Membre
Inscription : 20/04/2008
Messages : 122
Site Web

Re : Plugins - Statistiques

Stephane a écrit :

...
5) Pour afficher les statistiques coller le code ci-dessous par exemple dans le fichier sidebar.php du thème

	<h2>Statistiques</a></h2>
	<ul>
		<li>Total des pages vues: <?php $plxStats->TotalViews() ?></li>
		<li>Pages vues aujourd'hui:  <?php $plxStats->TodayViews() ?></li>
		<li>Visiteurs connectés: <?php $plxStats->OnlineVisitors() ?></li>
		<li>Nombre de visiteurs: <?php $plxStats->TotalVisitors() ?></li>
	</ul>

Bonsoir,

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

Hors ligne

#18 15/12/2009 22:40:27

Stéphane
Responsable du projet
Lieu : pas loin de Metz
Inscription : 07/08/2007
Messages : 6 190
Site Web

Re : Plugins - Statistiques

Bonjour zorn

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

<?php global $plxStats; ?>

(à vérifier si ça marche - pas sur...)

Stéphane


Mes articles et tutoriels pour PluXml
Pluxopolis mon site sur PluXml, mais pas seulement...
Twitter: @pluxopolis

Hors ligne

#19 16/12/2009 21:49:56

zorn
Membre
Inscription : 20/04/2008
Messages : 122
Site Web

Re : Plugins - Statistiques

smile
Super, ça marche, merci !

J'ai rajouté mon site dans mon profil : vous pouvez aller jeter un oeil roll

Dernière modification par zorn (16/12/2009 21:53:22)

Hors ligne

#20 01/01/2010 22:30:27

Alex7995
Membre
Inscription : 17/08/2009
Messages : 35

Re : Plugins - Statistiques

J'ai un petit problème moi pour séparer les milliers par des espaces. Voici le code en question :

<?php echo number_format($plxStats->TotalViews(), 0, '.', ' '); ?>

qui rajoute un 0 !

Hors ligne

#21 15/01/2010 23:03:06

Ludo_17
Membre
Inscription : 04/09/2009
Messages : 95
Site Web

Re : Plugins - Statistiques

Bonjour à tous,
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é:

 echo " visiteur".$nbtemp;

Ca fonctionne bien, le 's' s'ajoute à partir de deux visiteurs, cool, non ?  ;o).

Cordialement,
Ludo


Mon petit blog propulsé par pluxml

Hors ligne

#22 19/01/2010 03:42:10

antistress
Membre
Inscription : 28/12/2009
Messages : 354
Site Web

Re : Plugins - Statistiques

@ Ludo_17 : ça m'intéresse, peux tu préciser où il faut ajouter ton code STP ?
Pour ma part j'ai suivi le tuto et ajouté dans mon footer

<?php echo "Visiteur".$nbtemp; ?> <?php echo " connecté".$nbtemp; ?> : <?php $plxStats->OnlineVisitors() ?>

mais je préférais avoir l'accord au pluriel

Hors ligne

#23 19/01/2010 13:48:15

Ludo_17
Membre
Inscription : 04/09/2009
Messages : 95
Site Web

Re : Plugins - Statistiques

antistress a écrit :

@ Ludo_17 : ça m'intéresse, peux tu préciser où il faut ajouter ton code STP ?

La fonction OnlineVisitors()  se trouve dans le fichier stats.php du plugin de Stephane.

Pour la partie footer, je pense que tu peux concaténer tout ça en écrivant (non testé):

<?php echo "Visiteur".$nbtemp." connecté".$nbtemp." : ".$plxStats->OnlineVisitors() ?>

Cordialement,
Ludo

ps: voilà ce que ça donne sur  mon petit blog en construction  wink

(edit: heureusement qu'on peut modifier les messages... pour corriger les erreurs de bb et les fautes !  smile

Dernière modification par Ludo_17 (19/01/2010 13:51:45)


Mon petit blog propulsé par pluxml

Hors ligne

#24 19/01/2010 20:59:57

zorn
Membre
Inscription : 20/04/2008
Messages : 122
Site Web

Re : Plugins - Statistiques

J'ai jeté un oeil au blog : c'est joli.
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.

Hors ligne

#25 19/01/2010 21:59:14

Ludo_17
Membre
Inscription : 04/09/2009
Messages : 95
Site Web

Re : Plugins - Statistiques

zorn a écrit :

J'ai jeté un oeil au blog : c'est joli.
J'ai apprécié les onglets dans l'article sur le simulateur de vol : comment tu as fait ça ?

Merci wink. Les onglets : En utilisant un script que j'ai légèrement modifié pour mon site sous guppy et que j'ai mis à disposition ici. Si cela t'intéresse, le script tabberguppy est utilisable tel quel (deux fichiers, un js et un css) pour pluxml, il y a juste besoin de modifier header.php dans le thème utilisé pour intégrer ces fichiers dans l'entête de la page et pour en modifier la balise body.

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


Mon petit blog propulsé par pluxml

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2017 PluXml.org, tous droits réservés