Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-09-2009 14:24:59

herman
Membre
Date d'inscription: 26-08-2009
Messages: 10

les statistiques dans mon application

bjr a tous. je suis entrain de mettre sur pieds un intranet avec zend fralework et je voudrrais inserer des statistiques(diagrammes en batons, circulaire et autres si possible). j'aimerai savoir s'il est possible de generer des stats avec zend. Merci d'avance pour vos reponses

Hors ligne

 

#2 25-09-2009 15:00:40

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: les statistiques dans mon application

ben... heu... enfin... c'est que...

On peu le faire !

je vais te donner un aperçu rapide de ce que j'ai fais

ça ne sert pas à grand chose que je mette tout mon code car il est basé sur ZF1.0.4
mais je pense que les idées générales devraient t'intéresser

tout d'abord j'ai créé un module (zend) dans mon application pour les graphes
dans ce module j'ai créé une classe Graphe_Controllers_Action qui dérive de  Zend_Controller_Action
cette classe est la classe de base de tous mes controleur du module graphe
son code est le suivant

Code:

<?php
/*
cette classe permet de mettre en commun des variables et méthode propore à tout le module client
*/
Zend_Loader::loadClass("Fast_Controller_Action");
class Graphe_Controllers_Action extends Fast_Controller_Action
{

    protected $_useHistory = false;

    /**
     * initialise le controleur
     * tout les controleur ajax ne retourne pas de vue
     * ils envoient du json au client
     */
    public function init()
    {
        parent::init();
        $this->getFrontController()->setParam('noViewRenderer', true);
        $this->_response->setHeader('Content-Type', 'image/png', true);
        //$this->_response->setHeader('Content-Type', 'text/plain', true);
        require_once ("Graphe/jpgraph.php");
        require_once ("Graphe/jpgraph_bar.php");
        $this->graph = null;
    }

    public function postDispatch() {
        if ($this->graph instanceof Graph) {
            $this->graph->img->SetImgFormat('png');

            $this->graph->Stroke();
        }
        parent::postDispatch();
    }

}

elle initialise jpgraph indique au front controleur qu'il n'y a pas de vue à rendre et défini un memebre graph à nul

lorsque l'action est terminée si graph est un graphe alors il est envoyé au client

un controlleur va fonctionner comme tout les controlleur ZF sauf qui dérivera de cette classe

Code:

Graphe_DetailController extends Graphe_Controllers_Action {
....

    /**
     * @param site integer site_id
     * @param date optional date dans dans le mois demandé (default m-1)
     */
    public function getMonthVisitsAction()
    {
        $siteId = $this->_request->get('site');
        $date = $this->_request->get('date');
...
        try {
           $data = $this->model->getMonthVisits($siteId,$date);
        } catch (Exception $e) {
            $data = null;
        }
....
        try {

            $this->graph = new Graph(300,80,'auto');
            $this->graph->SetScale("textlin");

            //SetMargin(left, right, Top, bottom);
            $left = 58;
            $right = 2;


            $this->graph->img->SetMargin($left, $right, 2, 20);
            $this->graph->img->SetTransparent("white");
            $this->graph->SetFrameBevel(0,false,'white');
            $this->graph->SetMarginColor('white');


            $this->graph->xaxis->SetTickLabels($labels);

            $bplot = new BarPlot($datay);
            $bplot->SetFillColor("orange");
            $bplot->SetWidth(1);

            $this->graph->Add($bplot);

        } catch (Exception $e) {
            //LOGS exception
        }
    }

un graphe sera donc le résultat du traitement d'une action d'un contrôleur du module graphe.

j'avais 25 graphes différents dans mon application lorsque j'ai fais ça

avec les nouvelles version de ZF il est envisageable de faire ça à coup de plugin
mais je ne pense pas que ce soit la meilleur façon de faire

l'idéal pour moi serait de définir un viewRenderer qui utilise jpGraph tout devient drait alors beaucoup plus simple.

les controller resteraient des contrôleur "normaux" qui invoque le métier et construisent une structure de donnée qu'il donne à la vue.
la vue elle défini le graphe et l'affiche ainsi si on veux afficher un camembert au lieu d'un histogramme avec les même données c'est la vue que l'on touche ce qui est logique.

mais bon c'est un bricolage qui fonctionne plutôt bien
A+JYT

Hors ligne

 

#3 26-09-2009 09:25:44

herman
Membre
Date d'inscription: 26-08-2009
Messages: 10

Re: les statistiques dans mon application

bjr sekaijin ta reponse ma bcp aider. il a fallu que je met a jour sur l'utilisation de jpgraph ce qui est fait maintenan je  vais essayer de suivre ton exemple et t rendre compte sur l'evolution. merci encore

Hors ligne

 

#4 26-09-2009 11:29:32

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: les statistiques dans mon application

Salut,

sekaijin a écrit:

l'idéal pour moi serait de définir un viewRenderer qui utilise jpGraph tout devient drait alors beaucoup plus simple.

les controller resteraient des contrôleur "normaux" qui invoque le métier et construisent une structure de donnée qu'il donne à la vue.
la vue elle défini le graphe et l'affiche ainsi si on veux afficher un camembert au lieu d'un histogramme avec les même données c'est la vue que l'on touche ce qui est logique.

Juste pour échanger les expériences. De mon côté j'ai utilisé la version free de fusioncharts (http://www.fusioncharts.com/free/). J'ai utilisé le contextSwitch pour passer en XML le contexte de mes actions. Ces actions rendent des vues xml qui sont directement utilisées par fusionchart.


A+ benjamin

Dernière modification par Delprog (26-09-2009 11:30:19)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#5 27-09-2009 17:25:00

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: les statistiques dans mon application

Pour compléter le tableau, j'utilise Artichow http://www.artichow.org/.

Je désactive le renderer dans mon action et j'utilise Artichow de façon très classique dans une action (cf doc d'artichow).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 28-09-2009 09:48:42

aityahia
Membre
Lieu: Béjaia
Date d'inscription: 29-07-2008
Messages: 10
Site web

Re: les statistiques dans mon application

Salut.
Regarde cet article aussi, il est assez intéressent.
 

http://andry.developpez.com/tutoriels/p … metriques/


[ZF 1.7][ExtJS 2.2]
Vistez mon Blog

Hors ligne

 

#7 28-09-2009 13:15:17

herman
Membre
Date d'inscription: 26-08-2009
Messages: 10

Re: les statistiques dans mon application

le gaphe n'apparait pas c le code compile de ma page qui s'affiche en html

Hors ligne

 

#8 28-09-2009 13:54:54

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: les statistiques dans mon application

Bonjour herman,

Tu peux mettre des balises code et /code autour de ton code pour faciliter la lecture ?

Merci d'avance,
Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#9 28-09-2009 14:42:26

herman
Membre
Date d'inscription: 26-08-2009
Messages: 10

Re: les statistiques dans mon application

voici mon code

Code:

<?php
  
class  StatistiquesDetailController extends App_Controller_Action
{
     public function init()
    {
        parent::init();
        $this->getFrontController()->setParam('noViewRenderer', true);
        $this->_response->setHeader('Content-Type', 'image/png', true);
        //$this->_response->setHeader('Content-Type', 'text/plain', true);
        require_once ("jpgraph/jpgraph.php");
        require_once ("jpgraph/jpgraph_bar.php");
        //fichier permettant de dessiner des camemberts
        require_once ("jpgraph/jpgraph_pie.php");
        require_once ("jpgraph/jpgraph_pie3d.php");
        $this->graph = null;
    }

    /**
     *  @param date optional date dans dans le mois demandé (default m-1)
     */
     
    public function camembert3DprojetAction()
    {   
        //recuperation des dates pour lesquelles on veut voir les statistiques
        //$date = $this->_request->get('date');
        $date = 2009;
        
        $tableauTypes=array();
        $tableauNombre=array();
        $i=0;
        //production des données
        try {
           $data = new Model_DbTable_Ressource();
        } catch (Exception $e) {
            $data = null;
        }
        // mise en place des données pour realiser le graphique
           foreach( $data->getby_Idtype_and_Year($date) as $datas){
               $tableauTypes[$i] = $datas['nom_type'];
               $tableauNombre[$i++] = $datas['nbre'];
           }
        
        //Elaboration du camembert 3D
        try {
            // definir la largeur et la hauteur du graphe
            $this->graph = new PieGraph(300,200);
            
            //ajouter une ombre au conteneur
            $this->graph->SetShadow();
            
            // Donner un titre
            $this->graph->title->Set("statistiques des projets realises pour une annee PIE 3D");
            
            // Quelle police et quel style pour le titre
            // Prototype: function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10)
            // 1. famille 
            // 2. style
            // 3. taille
            $this->graph->title->SetFont(FF_GEORGIA,FS_BOLD,12);
            
            // Créer un camembert
            $this->pie = new PiePlot3D($tableauNombre);
            
            // Quelle partie se détache du reste
            $this->pie->ExplodeSlice(2);
            
            // Spécifier des couleurs personnalisées... #FF0000 ok
            $this->pie->SetSliceColors(array('red', 'blue', 'green','white'));
            
            // Légendes qui accompagnent le graphique, ici chaque année avec sa couleur
            $this->pie->SetLegends($tableauTypes);// creer le tableau pour les données
            
            // Position du graphique (0.5=centré)
            $this->pie->SetCenter(0.4);
            
            // Type de valeur (pourcentage ou valeurs)
            $this->pie->SetValueType(PIE_VALUE_ABS);
            
            // Personnalisation des étiquettes pour chaque partie
            $this->pie->value->SetFormat('%d projet');
            
            // Personnaliser la police et couleur des étiquettes
            $this->pie->value->SetFont(FF_ARIAL,FS_NORMAL, 9);
            $this->pie->value->SetColor('blue');
            
            // ajouter le graphique PIE3D au conteneur
            $this->graph->Add($this->pie);
            
        }
        catch(Exception $e){
          //LOGS exception             
          }
    }
    
     public function postDispatch() {
        if ($this->graph instanceof PieGraph) {
        
           // $this->graph->img->SetImgFormat('png');
            
            // provoquer l'affichage
            $this->graph->Stroke();
        }
        parent::postDispatch();
    }
}
?>

Hors ligne

 

#10 28-09-2009 15:10:00

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: les statistiques dans mon application

Tu peux nous envoyer un extrait de ce qui apparaît dans le navigateur quand tu tapes l'URL de ton image ?

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#11 28-09-2009 17:34:09

herman
Membre
Date d'inscription: 26-08-2009
Messages: 10

Re: les statistiques dans mon application

voilà le contenu de la page lorsque je clique sur l'url

Code:

<!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">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
        <title>|SOFTSERVER</title>     <link rel="icon" type="images/png" href="/softserver/public/img/bare.png"/>
         <link href="/softserver/public/css/style.css" media="screen" rel="stylesheet" type="text/css" />   

</head>

<body>
    <div id="page_container">

        <!-- the banner for every page -->
        <div id="page_header">

            <a id="logo" href="/SoftServer/public/"></a>

            <div id="main_links">
                <ul class="navigation">
    <li>
        <a title="Acceuil" href="/SoftServer/public/">Acceuil</a>
    </li>
    <li>
        <a title="logiciel" href="/SoftServer/public/backend/ressource">Logiciel</a>
    </li>
    <li>
        <a title="new user" href="/SoftServer/public/backend/signup">New user</a>
    </li>
    <li>
        <a title="Etudiant" href="/SoftServer/public/backend/etudiant">Etudiant</a>
    </li>
    <li>
        <a title="Type ressource" href="/SoftServer/public/backend/typeressource">Type ressource</a>
    </li>
    <li>
        <a title="Delete account" href="/SoftServer/public/backend/delete">Delete account</a>
    </li>
    <li class="active">
        <a title="statistiques" href="/SoftServer/public/StatistiquesDetail/camembert3Dprojet">statistiques</a>
    </li>
    <li>
        <a title="Telecharger" href="/SoftServer/public/Telecharger">Telecharger</a>
    </li>
</ul>            </div>

            <div id="user_info">
                <ul id="user_links">
                                            <li><a href="/SoftServer/public/login">
                           Login</a>
                        </li>
                    
                 </ul>
            </div>
        </div>

        <!-- every page will have content container -->
        <div class="content">
                    </div>

        <!-- the footer for every page -->
        <div id="page_footer" class="clearfix">
        
            <div class="copyright">ThreadAffinity © 2009</div>
            
            
            <div class="legal">
                <a href="/privacy.html">Privacy Policy</a>
                <span class="sep">|</span>
                <a href="/terms.html">Terms of Use</a>
            </div>


            <div class="poweredby">
                <a href="http://framework.zend.com/">
                    <img src="/softserver/public/img/bas.png" border="0"/>
                </a>
            </div>
            
        </div>

    </div>

</body>
</html>

Hors ligne

 

#12 08-10-2009 12:42:44

herman
Membre
Date d'inscription: 26-08-2009
Messages: 10

Re: les statistiques dans mon application

bonjour, a tous j'ai finalement reussit a mettre a jour mon controlleur pur gerer me graphes mais je me confonte a un autre probleme. j'aimerai savoir si il serait possible d'afficher les diagrammes statiques directement dans la page si oui comment proceder? merci d'avance pour vos aides.

Hors ligne

 

#13 08-10-2009 15:20:12

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: les statistiques dans mon application

si ton image est à l'URL
http://monsite.com/graph/stats

dans n'importe quelle page html, tu fais un

Code:

<img src="http://monsite.com/graph/stats"/>

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages