PluXml Forum Home Documentation Ressources Forum Blog PluCSS Github

Statistics Plugin (English Version)

StephenTaylorStephenTaylor Member
avril 2015 modifié dans Plugins
After installing this amazing stats plugin from here on my blog. I decided to post the English translation i had to make for the plugin. So here is the full English version of the plugin!. :)


Installation

1) Create a plugins folder in the root of Pluxml (If you do not already have a plugin folder.)

2) In the plugins folder create a folder stats

3) Then in the stats folder. Create a stats.php file and paste in the code below:
[== PHP ==]
<?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($this->filename); # récuperation des stats
        $this->_cleanVisits(); # suppression des anciens visiteurs 
        $this->_addVisitor(); # ajoute le nouveau visiteur et gère les compteurs
        $this->_editStats($this->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() {
      global $nbtemp;
        echo sizeof($this->aStats['online']);
    }
	
	 /**
     * Ecris 's' s'il y a plusieurs visiteurs
     *
     * @param    null
     * @return    stdout
     * @author    Ludo_17 et Amaury G
     **/    
    function Pluriel() {
        if(sizeof($this->aStats['online']) > 1)
			echo 's';
    }
	    
    /**
     * 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,Now edit the header.php of the theme you are using.And below the line:
[== PHP ==]
<?php if(!defined('PLX_ROOT')) exit; ?>

Add:
[== PHP ==]
<?php include_once(PLX_ROOT.'plugins/stats/stats.php'); ?>

5,To view statistics paste the following code in the sidebar.php theme file:

[== PHP ==]
<h2>Statistics</a></h2>
  <ul>
        <li>Total page views: <?php $plxStats->TotalViews() ?></li>
        <li>Page views today:  <?php $plxStats->TodayViews() ?></li>
        <li><?php echo "Visitor" ?><?php $plxStats->Pluriel() ?> <?php echo "connected"; ?><?php $plxStats->Pluriel() ?>: <?php $plxStats->OnlineVisitors() ?></li>
        <li>Number of visitors: <?php $plxStats->TotalVisitors() ?></li>
    </ul>
Connectez-vous ou Inscrivez-vous pour répondre.