Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
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
<?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
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
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
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)
Hors ligne
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
Hors ligne
Salut.
Regarde cet article aussi, il est assez intéressent.
http://andry.developpez.com/tutoriels/p … metriques/
Hors ligne
le gaphe n'apparait pas c le code compile de ma page qui s'affiche en html
Hors ligne
Bonjour herman,
Tu peux mettre des balises code et /code autour de ton code pour faciliter la lecture ?
Merci d'avance,
Philippe
Hors ligne
voici mon 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
Tu peux nous envoyer un extrait de ce qui apparaît dans le navigateur quand tu tapes l'URL de ton image ?
A+, Philippe
Hors ligne
voilà le contenu de la page lorsque je clique sur l'url
<!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
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
si ton image est à l'URL
http://monsite.com/graph/stats
dans n'importe quelle page html, tu fais un
<img src="http://monsite.com/graph/stats"/>
A+, Philippe
Hors ligne