/extension/myblog/design/myblog/stylesheets/white.css
/extension/myblog/design/myblog/stylesheets/black.css

Select your style :

A la une // Les blogs sur le développement Web, l'oenologie, Montpellier, etc...

Ma cave sur eZ Publish : Google Maps (Partie 3)

Après la description des classes et des templates pour le développement de ma cave sur eZ Publish, je suis bien obligé de terminer cette série de billets sur Google Maps.

C'est l'occasion de démystifier un peu ce mécanisme qui impressionne beaucoup, mais qui finalement est relativement simple à déployer.

D'une part c'est Google qui fait tout le travail en proposant un excellente API, d'autres part eZ Publish propose quelques extensions communautaires facilement exploitables pour les besoins les plus simples.

Le choix d'une extension

eZ Publish propose plusieurs extensions communautaires, plus ou moins étendues, comme GIS (Global Information Systems) ou Google Maps Extension. J'ai sélectionné cette dernière, qui correspond bien à mon besoin, à savoir :

  • Localiser chacun des domaines par un attribut (longitude, latitude), représenté par un simple marqueur cliquable
  • Illustrer les différentes listes de domaines (sur la France, par région et par appellation), par une carte localisant tous les domaines concernés par autant de marqueurs cliquables

Installation & création de la clé Google Maps

Après avoir copié et déclaré son extension dans son /settings/override/site.ini.append.php, il sera nécessaire de créer une clé Google Maps à cette adresse : http://code.google.com/intl/fr/apis/maps/signup.html. Une clé est nécessaire pour chaque domaine exploitant des affichages Google Maps, pour ma part il m'a donc fallu créé 4 clés distinctes :

  • Une clé pour http://www.gandbox.fr, et une clé pour mon Back Office
  • Une clé pour http://gandbox.loc, ma version locale de développement, et une clé pour mon Back Office local de développement

Il faut ensuite ajouter dans son site.ini.append.php la valeur de la clé :

[SiteSettings]
GMapsKey=ABQIAAAAjjI5W4TgQODhLDv08YeFbRRHSVirfEVF1qGURhjW3ZpcMfgZzRQJfj9WirFbjfdTtkgqHOkHUjP7mQ
 
 

Pour éviter les collisions entre le Front, le Back Office, les versions de développement et de production, il est conseillé de procéder de la sorte :

  • Clé pour le Front (local et distant) : /settings/siteaccess/[mon_siteaccess]/site.ini.append.php
  • Clé pour le Back (local et distant) : /settings/siteaccess/[mon_siteaccess_admin]/site.ini.append.php

Cette mesure s'accompagne d'une mesure générale, qui consiste à bien séparer :

  • Les paramètres spécifiques à l'environnement d'hébergement, toujours positionnés dans /settings/override/ et dans /settings/siteaccess/[mon_siteaccess]/
  • Les paramètres spécifiques au différents sites, toujours positionnés dans extension/[mon_extension]/settings/ et dans extension/[mon_extension]/settings/siteaccess/[mon_siteaccess]/

Ainsi, vous pouvez travailler en local, et procéder aux mises en lignes en écrasant simplement et exclusivement le répertoire extension/[mon_extension], sans vous soucier des paramètres des différents serveurs.

Création de l'attribut de datatype GMaps Location

Lors de l'édition de vos classes, si l'extension est correctement installée, vous devriez voir apparaître un nouveau datatype : GMaps Location.

Lors de l'édition d'un objet, le Back Office vous permet alors de localiser directement un lieu par une classique recherche Google Maps.

Vous pouvez étendre l'interface Back Office en redéfinissant dans votre extension le template extension/[mon_extension]/design/standard/templates/content/datatype/edit/ezgmaplocation.tpl

Le datatype "localisation" est présent dans la classe "Cave Région", afin de fixer une carte générale de la région (centré à ma convenance). J'ai également ajouté le datatype "localisation" sur la classe "Cave Domaine" pour localiser chacun des domaines. Voir à ce sujet le modèle général des classes.

Création des templates

L'extension est livrée avec un exemple de template (gmap.tpl) assez modulaire et facile et étendre. Il est donc conseillé de copier ce template dans son extension, pour l'exploiter comme base de travail (par exemple pour personnaliser le contenu XHTML du marqueur). Il est également conseillé de bien lire le code proposé, et d'apprendre les bases du fonctionnement de l'API Google Maps.

L'appel se fait ensuite via un include. Par exemple pour l'affichage de tous les domaines d'une même région :

{include uri='design:gmap/gmap.tpl' 
 locations=$vin_domaines
 location_attribute='localisation'
 size=array(600,400)
 center=array($node.data_map.localisation.content.latitude, $node.data_map.localisation.content.longitude)
 show_popups_on_page=false()
 zoom=$node.data_map.zoom.content
}
 
 

Le paramètre zoom peut être défini "en dur". Dans mon cas, il est défini dans un attribut spécifique de ma classe "Cave Région".

$vin_domaines est le résultat d'un Fetch et contient le tableau d'objets des domaines de la région (classe "Cave Domaine"). Dans mon cas la localisation n'est pas obligatoire, je dois donc vérifier que chaque objet possède bien une localisation.

{def  $vin_domaines = array()
 $vin_domaines_fetch = fetch( 'content', 'list', hash( 'parent_node_id', $node.node_id,
   'class_filter_type',  'include',
   'class_filter_array', array('cave_domaine'),
   'sort_by', array( array( 'attribute', true(), 'cave_domaine/title' ) ),
   ) )}
   
{foreach $vin_domaines_fetch as $domaine}
 {if $domaine.data_map.localisation.content.latitude|ne('')}
  {set $vin_domaines = $vin_domaines|append($domaine)} 
 {/if}
{/foreach}
 

Localisation :

Que boire avec ce billet ?

Domaine Gardiés - Vieilles Vignes - Rouge 2004

Région : Languedoc
Appellation : Côtes du Roussillon villages
Domaine : Domaine Gardiés
Couleur :
 
Stock : 0
Notation :
Prix : 17 €
Commentaire(s) : 0 Commentaire(s)

Une très belle découverte que cette cuvée "Vieilles Vignes". Très typique et caractéristique des vins du Roussillon, on retrouve la concentration en fruit rouges, l'intensité et la profondeur aromatique qui font le succès des grands vins de cette région. Cette bouteille a ouvert ma curiosité sur les autres vins du domaine... à découvrir prochainement.

Publié par : Sylvain_G, le 26 Février 2009 08:56 pm

Bonne Extension

Et bien je connaissait pas cette extension, mais sur le papier ca à l'air fort attrayant. Surtout que pour une fois il y a l'air d'avoir une vraie gestion BackOffice de ce Datatype.

Juste une question, ca donne quoi coté perf si tu colle bcp de marqueurs? (disons 200)

Question annèxe, dans ta template
<pre>
{def $vin_domaines = array()
$vin_domaines_fetch = fetch( 'content', 'list', hash( 'parent_node_id', $node.node_id,
'class_filter_type', 'include',
'class_filter_array', array('cave_domaine'),
'sort_by', array( array( 'attribute', true(), 'cave_domaine/title' ) ),
) )}

{foreach $vin_domaines_fetch as $domaine}
{if $domaine.data_map.localisation.content.latitude|ne('')}
{set $vin_domaines = $vin_domaines|append($domaine)}
{/if}
{/foreach}
</pre>

Pourquoi un fetch puis un foreach alors que tu aurai pu inclure dans ton fetch un
attribute_filter?

Publié par : gandbox, le 27 Février 2009 02:39 pm

Google maps, fetch et volume de données

Concernant le volume de données, voici un exemple avec 86 marqueurs (pour l'instant) : http://www.gandbox.fr/ma-Cave/(sortby)/localisation

Evidement, si j'avais 500 domaines en cave (snif, par encore), je m'y prendrais autrement pour la localisation générale (1 unique marqueur plus graphique par région, avec des totaux dans la bulle, ou encore un chargement AJAX selon le niveau de zoom).

Concernant le fetch, je n'utilise pas d'attribute_filter, parceque le résultat de l'unique fetch sert également à lister tous les domaines en dehors de la carte (dont ceux qui ne sont pas localisés). Voir sur l'exemple précédent la liste des domaines en dessous de la carte.

Concernant la gestion back office des datatypes, il ne faut pas oublier que eZ permet de redéfinir l'interface au besoin lorsque celle-ci n'est pas satisfaisante : extension/[mon_extension]/design/standard/templates/content/datatype/edit/ezgmaplocation.tpl

Publié par : BenGee, le 02 Mars 2009 09:07 pm

Le guide des vins alternatifs

Enfin !

L'encyclopédie des vins alternatifs, originaux et accessibles est disponible.

Content de voir que tu t'es enfin lancé. Je commence la campagne publicitaire dès demain Wink

Au plaisir de te lire et peut-être de te parler autour d'une bonne bouteille et d'une bonne assiette ;-p

BenGee

Publié par : gandbox, le 03 Mars 2009 10:25 pm

Autour d'une bonne bouteille ?

Et pourquoi plusieurs bouteilles ? Je te tiens au courant si je fais une soirée dégustation Smiling