Utiliser le plugin sfEasyGMapPlugin avec symfony 1.4
26 avr. 2010
Par Strider - Sites - Lien permanent
Le plugin sfEasyGMapPlugin permet d'ajouter simplement les fonctionnalités de Google Maps a votre projet Symfony. La documentation donnée sur la page du plugin est loin d'être complète et à jour, et installer ce plugin sur un projet Symfony 1.4 n'est pas trivial, d'où ce billet.
Pour commencer il faut obtenir une clé pour l'API Google Maps. Il vous faudra autant de clés que de domaines et cela vaut pour les domaines locaux. Étant donné que je travaille sur plusieurs machines a des lieux différents, il m'a fallu créer 2 clés uniquement pour les machines de développement, il m'en faudra une troisième pour le site réel.
Les clés sont a placer dans le fichier app.yml de votre application:
all:
google_maps_api:
keys:
domaine1: clé gmaps
domaine2: autre clé gmaps
Il faudra aussi ajouter au fichier settings.yml une référence au plugin dans les modules utilisés :
all:
.settings:
enabled_modules: [default, sfEasyGMapPlugin]
Ceci fait parti des choses qui ne sont indiquées nulle part dans la documentation, il m'a fallu chercher dans les listes de discussions pour trouver cela... Un fois la clé mise en place on récupère le plugin.
cd plugins svn co svn co http://svn.symfony-project.com/plugins/sfEasyGMapPlugin/branches/v3 sfEasyGMapPlugin cd .. ln -s ../plugins/sfEasyGMapPlugin/web web/sfEasyGMapPlugin
Tout ce qui concerne les taches qui automatisent l'installation des plugins comme symfony plugin:install ou symfony plugin:publish-assets ne fonctionne pas, pas la peine de perdre du temps la dessus, le plugin a besoin d'être mis a jour. Cela ne l'empêche pas de fonctionner a merveille, il est juste plus compliqué a mettre en place que d'autres plugins. Dernière chose a mettre en place, dans le fichier config/ProjectConfiguration.class.php ajouter a la liste de vos plugins utilisés :
$this->enablePlugins('sfEasyGMapPlugin');
On n'oubliera pas le clear cache de rigueur pour ce types d'opérations:
.symfony cc
Le plugin est maintenant utilisable, nous allons le tester sur une des actions du projet.
Dans l'action:
public function executeIndex(sfWebRequest $request)
{
$this->gMap = new GMap();
$this->gMap->addMarker(new GMapMarker(51.245475,6.821373));
$this->gMap->addMarker(new GMapMarker(46.262248,6.115969));
$this->gMap->centerAndZoomOnMarkers();
}
Dans le template:
<?php use_helper('GMap') ?>
<?php include_map($gMap,array('width'=>'512px','height'=>'400px')); ?>
<?php include_map_javascript($gMap); ?>
Ceux qui suivent la documentation officielle en parallèle remarqueront certaines différences. J'ai ajouté un appel a la fonction centerAndZoomOnMarkers() dans l'action, sinon on se retrouve avec un carré gris et j'ai supprimé l'helper 'Javascript' dans use_helper() qui est déprécié dans Symfony 1.4.
Nous voyons ici les fonctionnalités de base du plugin, mais celui est en réalité beaucoup plus riche. Essayez le Sample 2 de la documentation et vous verrez qu'il est très simple de faire une recherche GoogleMaps et de convertir le nom d'une ville en coordonnées.
En plus du plugin et grace a Doctrine, stocker des coordonnées deviens un jeu d'enfant grâce au comportement Geographical.
Voila pour le plugin sfEasyGMapPlugin, j'espère que ce billet deviendra rapidement inutile et que le code source et la documentation seront mises a jour pour prendre en compte Symfony 1.4 et compléter les informations manquantes.

Commentaires
Merci beaucoup pour cet article très pédagogique. C'est d'ailleurs comme ça à mon avis que la documentation des projets open-source doit se faire : grâce à de bons articles de blog qui peuvent ensuite être intégré dans la doc officielle du plugin :-)
Quelques remarques cependant :
- la partie sur le "enabled_modules" n'est pas documenté car elle n'est pas nécessaire. Ce module sert uniquement pour afficher les "samples". Aucune raison de le rendre actif en production.
- cela m'étonnerait que plugin:publish-assets ne fonctionne pas, car c'est une task générique symfony qui marche pour tous les plugins qui contiennent un dossier web. Par contre il faut le faire après l'étape "enablePlugin" dans symfony 1.4
Bref, c'est un plugin open-source, donc bien sûr l'équipe qui le maintient fait de son mieux pour documenter ce qu'elle développe. Mais pour l'instant nous mettons l'accent sur les samples et sur les tests et moins sur de la doc écrite. Si tu penses pouvoir contribuer en ajoutant ton article par exemple, tu es le bienvenue :-)
Le plus simple est de forker http://github.com/fabriceb/sfEasyGM... sur github et de me soumettre tes commits. Ceci est bien sûr valable pour tous ceux qui veulent contribuer !
Fabrice
fabricebsalut,
excellent ton tutoriel, en 2/2 j'ai fait ce que j'avais à faire... vive le libre, vive symfony ! merci à toi et aux devs du plugin.
kenavo,
--
Baptiste SIMONBaptiste SIMON
pour mes tutos Symfony : http://www.e-glop.net/
pour l'aspect professionnel : http://www.libre-informatique.fr/
le monde est petit quand même non ? (je viens de calculer que c'était ton blog strider !!)
BeTaYou can find more info about sfEasyGMapPlugin and some tips at http://www.symfoners.com/2010/07/07...
NataliaI’m pleased I found this weblog, I couldnt discover any info on this subject matter earlier to. I also operate a site and if you want to ever severe in a little bit of guest writing for me if possible really feel free to let me know, i am usually look for people to check out my site.
Coach OuteltHello,
super ce plugin! j'ai juste un petit souci
rrren production, les map disparaissent le jour et reapparaisent la nuit.
une idée ?