Couche d'abstraction propriétaire

Le plugin a été conçu pour permettre l'ajout d'implémentation de carte. Le mécanisme a été testé lors de l'ajout d'une implémentation en Google Maps V3 alors que le plugin a initialement été développé en Google Maps V2.

 

Le mécanisme est assez simple : tous les fichiers spécifiques à une implémentation sont regroupés dans un dossier spécial et un pipeline permet de déclarer une nouvelle implémentation.

Pourquoi ne pas utiliser une librairie existante ?

Tout d'abord par ce que je n'en connaissais aucune quand j'ai commencé ce plugin ! Ensuite parce que ce n'est pas forcément une bonne idée.

Par exemple, il y a la librairie Mapstraction (utilisée par le plugin GIS2). Elle permet d'afficher des cartes Google Maps, Open Layers, Yahoo, Bing. Il est sûr que l'ajout d'une implémentation Mapstraction à GMap lui donnerait plus de possibilités.

Cependant :

Où se trouvent les fichiers d'implémentation ?

Les implémentations sont regroupées dans le dossier mapimpl/ situé à la racine du plugin.

De nouvelles implémentations peuvent être ajoutées soit dans ce dossier, soit dans un dossier squelettes/mapimpl/, soit encore dans le dossier mapimpl/ d'un plugin.

Les implémentations sont identifiées par un code qui sert de nom de dossier pour les fichiers. GMap inclut une implémentation Google Maps V2 identifiée par gma2 et une implémentation Google Maps V3 identifiée par gma3. On trouve donc des dossiers mapimpl/gma2 et mapimpl/gma3.

Sous ces dossiers, les fichiers sont encore regroupés selon leur fonction :

D'autres implémentations ?

Le plus urgent est certainement de développer une implémentation OpenLayers.

Ajouter une implémentation Mapstraction pourrait ouvrir les possibilités sur Yahoo et Bing à moindres frais.

Détails de l'ajout d'une implémentation

Déclaration de l'implémentation

Le plugin utilise un pipeline nommé gmap_implementations pour récupérer la liste des implémentations.

Le pipeline reçoit en paramètre un tableau indexé dont la clef est le code de l'implémentation.

La fonction qui traite le pipeline devrait faire être de la forme suivante :

function myplug_gmap_implementations($apis)
{
  $apis['code'] = array( 'name' => "nom de l'implémentation", 'explic' => "explications affichées sur la page de paramétrage");
  return $apis;
}

 

Grâce à cette déclaration, GMap sait qu'une implémentation "code" existe, il va donc la proposer dans les pages de paramétrage et utiliser les fichier du dossier mapimpl/code/.

Le script d'implémentation

Le script principal de l'implémentation est une classe MapWrapper (autant que javascript permet de faire des "classes") qui implémente les méthodes utilisées par GMap.

Il y a certainement des progrès à faire pour faciliter l'implémentation des fonctions. Actuellement, le plus simple est de partir d'un fichier existant et de recoder toutes les fonctions qui ne sont pas préfixées par un "_".

Les fonctions PHP pour la partie publique

Le dossier public/ doit contenir :

Les pages de paramétrage (partie privée)

Le dossier prive/ contient les fonctions PHP utilisées pour initialiser, afficher et traité les paramètres spécifiques à l'implémentation.

Actuellement, les paramètres sont regroupés en trois blocs :

 

Pour chaque bloc de paramètres, il faut trois fonctions :