Générer des graphiques avec Artichow et CakePHP

Note : cet article est une reprise d’un ancien article anciennement présent sur kazhar.org et légèrement étoffé.

La librairie php artichow permet de générer des images de manière assez simple.
Cela rends la génération de graphiques presque amusante ;-)

Malheureusement il faut trifouiller un peu pour l’intégrer avec CakePHP.
En effet, les deux applications implémentent une classe nommée “Component”. Et les espaces de nom n’étant pas encore disponibles (ils sont prévus pour PHP 5.3), il n’est pas possible de ruser de cette manière pour implémenter l’un avec l’autre.
Heureusement il existe une autre solution.

Dans le fichier Artichow.cfg.php, il y a la ligne suivante :
define(‘ARTICHOW_PREFIX’, ”);

Placez le préfixe que vous désirez (moi j’ai mis arti. Mais on se moque un peu de la valeur).

Maintenant vous n’avez plus de souci de conflit avec la classe Component. Mais vous avez des erreurs disant que des classes telles que Driver n’existent pas.
Modifiez les trois ou quatre erreurs signalées, notamment dans inc/drivers/gd.class.php en ajoutant ‘aw’ devant la classe appelée.
Ainsi, Driver devient awDriver.

Enfin l’inclusion. Dans l’action ou vous souhaitez générer un graphique, placez :

function graph() {

     App::import('Vendor', 'artichow/LinePlot.class');
     $graph = new Graph(400, 400);
     $graph->setAntiAliasing(TRUE);

     $values = array(1, 4, 5, -2.5, 3);
     $plot = new LinePlot($values);

     $plot->setBackgroundGradient(
          new LinearGradient(
               new Color(210, 210, 210),
               new Color(250, 250, 250),
               0
          )
     );
     $plot->yAxis->setLabelPrecision(1);
     $plot->setSpace(5, 5, NULL, NULL);

     $graph->add($plot);
     $graph->draw();
}

Vous verrez alors en appellant cette action le graphique généré.

This entry was posted on Jeudi, juillet 17th, 2008 at 11:56 and is filed under Développement. You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.

Post a Comment