Jump to content

[Résolu - Module Magasins-GoogleMap]Afficher différents logos


MadW

Recommended Posts

Bonjour à tous.

 

Je viens ici pour vous demander un avis sur la possibilité de faire quelque chose d'assez échevelé, voir capilotracté.

 

Je vous installe le contexte : une boutique en ligne mise en place et modifiée par mes soins, propose plusieurs magasins. Pour une raison quelconque, trois types de magasins sont distingués, et chaque magasin doit être affiché sur la carte GoogleMaps avec un logo qui lui correspond.

 

J'ai décortiqué le Coeur de Prestashop, et j'ai vu qu'il n'était fait appel qu'au fichier "logo_store.gif", dans /classes/WebserviceSpecificManagementImages.php

 

Vu le nom du bousin, et sa taille, il s'agit j'imagine d'un gros morceau chargé d'à peut près tout ce qui est "Images" sur la boutique.

 

Soyons fou, je suis prêt à le modifier pour inclure en tout et pour tout la possibilité de :

- sélectionner un des 3 types de magasin -> 3 radios dans l'interface d'administration, coté "Magasin", avec nouvelle colonne dans la BDD.

- permettre au moteur Prestashop de lire cette fameuse colonne (pas bien compliqué).

- d'afficher au cas par cas le logo choisi.

 

Ma question principale serait : est il possible d'envoyer au "moteur GoogleMaps" (si je puis l'appeler ainsi) plusieurs logos différents, avec toutes les informations envoyées habituellement ?

Edited by MadW (see edit history)
Link to comment
Share on other sites

Aucune idée visiblement ?

 

Je me suis renseigné donc sur la page dédiée aux développeurs pour l'implantation de l'application sur un site internet, et cela semble possible.

 

Le seul problème est qu'il faut que je trouve où se trouve l'appel de cette application dans le coeur, pour l'étudier et voir comment le modifier.

Link to comment
Share on other sites

Erreur de ma part, j'ai oublié stupidement (ça l'est ...) de contrôler les fichiers javascript.

 

J'ai identifié les fonctions à impacter, je donnerai des infos sur les résultats.

Link to comment
Share on other sites

Ok j'ai la solution.

 

Je rappelle, la version de Prestashop que j'utilise pour la boutique est la 1.4.8.2.

 

Première chose à faire, ajouter une colonne dans la base de données "store". Je l'ai nommée 'type_magasin'. Contenu de la colonne, "normal" "type1" et "type2".

 

J'ai apporté des modifications dans l' "admin-tab" des magasins, pour qu'un radio apparaisse, à trois sélections (puisque trois types de magasins).

 

J'ai modifié aussi le traitement des données à envoyer à la BDD.

 

3 logos créés, qu'on nommera ici "logo_normal.gif" "logo_type1.gif" "logo_type2.gif"

 

Chose faites, maintenant le plus dur :

 

- /controllers/StoresController.php :

A partir de la ligne 133 :

$newnode->setAttribute('lat', (float)($store['latitude']));
$newnode->setAttribute('lng', (float)($store['longitude']));
//Ajout de la ligne qui suit.
$newnode->setAttribute('store_type',$store['type_magasin']);

 

- /themes/prestashop/js/stores.js :

A partir de la ligne 40 :

var id_store = markerNodes[i].getAttribute('id_store');
var has_store_picture = markerNodes[i].getAttribute('has_store_picture');
// Ajout de la ligne ci-dessous
var store_type = markerNodes[i].getAttribute('store_type');

 

La ligne 45 :

//Ajout de "store_type" à la fin de l'appel de la fonction
createMarker(latlng, name, address, addressNoHtml, other, id_store, has_store_picture,store_type);

 

A partir de la ligne 107 :

var id_store = parseFloat(markerNodes[i].getAttribute('id_store'));
var phone = markerNodes[i].getAttribute('phone');
//Ajout de la ligne ci-dessous
var store_type = markerNodes[i].getAttribute('store_type');

 

La ligne 115 :

//Ajout de "store_type" à la fin de l'appel de la fonction
createMarker(latlng, name, address, addressNoHtml, other, id_store, has_store_picture,store_type);

 

La ligne 138 :

//Ajout de "store_type" à la fin de la déclaration
function createMarker(latlng, name, address, addressNoHtml, other, id_store, has_store_picture,store_type)

 

ET ENFIN La ligne 141, remplacer :

var image = new google.maps.MarkerImage(img_ps_dir+'logo_stores.gif');

 

par :

//Ajout de ce switch
switch (store_type) {
case 'type1' :
 var image = new google.maps.MarkerImage(img_ps_dir+'logo_type1.gif');
 break;
case 'type2' :
 var image = new google.maps.MarkerImage(img_ps_dir+'logo_type2.gif');
 break;
case 'normal' : // ou mettre seulement "default :" si ça vous tente
 var image = new google.maps.MarkerImage(img_ps_dir+'logo_normal.gif'); // ou mettre 'logo_store.gif' à la place de 'logo_normal.gif' si ça vous tente.
 break;
}

 

 

Des avis ?

Edited by MadW (see edit history)
Link to comment
Share on other sites

  • 5 weeks later...

Je n'ai pas vraiment le temps de tout expliquer, mais l'idée principale est exactement la même que celle que j'ai énoncé ci-dessus pour extraire le type de magasin, et lui donner l'icone correspondante.

 

"$newnode->setAttribute('store_type',$store['type_magasin']);" devenant dans votre cas "$newnode->setAttribute('mail_magasin',$store['email']);"

 

 

"var store_type = markerNodes.getAttribute('store_type');" devenant "var mail_magasin = markerNodes.getAttribute('mail_magasin');"

 

Ainsi de suite.

 

Et puis, c'est bien de stocker l'adresse en mémoire, mais encore faut il l'afficher. Pas de problème, la ligne "var html = '<b>'+name+'</b><br/>'+address+(has_store_picture == 1 ?"[etc...]" de la fonction "createMarker", dans le fichier js dont je mentionne le nom plus tôt, il faut tout simplement ajouter après le '+address+' mail_magasin. Soit "var html = '<b>'+name+'</b><br/>'+address+'<br/>'+mail_magasin+'<br/>'+(has_store_picture == 1 ?"[etc...]

 

Si vraiment nécessaire, et si j'ai un peu de temps, je fournirai le code complet.

Edited by MadW (see edit history)
Link to comment
Share on other sites

  • 2 months later...

Merci à MadW pour ses explications très claires quant à l'affichage d'un champ supplémentaire dans la liste des magasins mais malheureusement en suivant la procédure ça ne marche pas chez moi !?

 

En cherchant bien sur le forum je n'ai pas trouvé de solution qui fonctionne pour afficher les champs 'email' ou 'note' qui pourtant existent côté BO.

 

C'est dommage que ce soit aussi ardu pour personnaliser l'affichage des popup magasins avec la carte GoogleMap. Une évolution du module pour faciliter la présentation du popup serait bienvenue.

 

Si quelqu'un à une solution même payante je crois que cela serait utile à la communauté à en croire le post http://www.prestasho...__fromsearch__1

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...