Jump to content

[Resolu] géolocalisation Variable "pays" et devise par pays.


Recommended Posts

[Résolu !! voir 2 POST plus Bas] :D

 

---------------------------------------------

 

Bonjour a tous, j'ai deux questions :

 

Existe t'il une variable "origine du pays" du visiteur, sur prestashop ?

Afin de pouvoir utiliser cette variable pour afficher ou non des informations..

 

j'ai cherché, et recherché et rien trouvé.

Dans l'idéal j'aimerai connaitre le pays de connexion, sans que l'utilisateur soit déja logué.

(J'ai le module de geolocalisation activé.)

 

Merci d'avance !! :)

 

 

De plus j'ai lu sur une info de release de la beta 1.4 de prestashop... qu'il y avait une fonction de blocage de la devise en fonction du pays du visiteur...http://www.prestasho...est_disponible/

impossible de trouver ce reglage dans ma version 1.4.7.3 cette fonction a t'elle disparue depuis?

 

 

Cordialement.

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

Bon ben... <_< je me répond à moi même... :D

mais je pense que ça pourra servir a de nombreuses personnes, vu les messages déja postés.

 

Pour utiliser la géolocalisation , voici le script (compatible prestashop 1.4.x.x) à incorporer dans les pages php où vous souhaitez géolocaliser !!

 

 

<?php
/* chemins pour acceder aux fichiers de geolocalisation installé par prestashop  */
require(dirname(__FILE__).'/config/config.inc.php');
include_once(_PS_GEOIP_DIR_.'geoipcity.inc');
include_once(_PS_GEOIP_DIR_.'geoipregionvars.php');

if (file_exists(_PS_GEOIP_DIR_.'GeoLiteCity.dat'))	/*execution du script si la base de donnée de localisation est bien présente... */

$ipvisiteur = $_SERVER['REMOTE_ADDR'];		/* recuperation IP visiteur */

$gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD);	  // ouverture de la base gratuite de maxmind */

$code  = geoip_country_code_by_addr($gi, $ipvisiteur); /* recuperation ISO pays */
$pays  = geoip_country_name_by_addr($gi, $ipvisiteur); /* recuperation Nom du pays */

geoip_close($gi);	/* fermeture de la base gratuite de maxmind */

echo $code,' - ',$pays;  /* affichage ! */

?>

 

A vous d'utiliser le résultat les variables codes et pays, pour par exemple afficher ou masquer un message, effectuer une action..

 

A+

 

 

EDIT du 05/06/2012 autre solution encore plus intégrée à prestashop :

 

Dans le fichier /classes/Frontcontroller.php

vous trouverez la fonction :

protected function geolocationManagement()

 

dans cette fonction completez la ligne :

global $cookie, $smarty;

par

global $cookie, $smarty,$codepaysuser,$nompaysuser;

 

Puis après la ligne

$record = geoip_record_by_addr($gi, Tools::getRemoteAddr());

 

ajoutez les lignes

 $codepaysuser  = geoip_country_code_by_addr($gi, Tools::getRemoteAddr()); /* recuperation ISO pays */
$nompaysuser  = geoip_country_name_by_addr($gi, Tools::getRemoteAddr()); /* recuperation Nom du pays */
$smarty->assign('codepaysuser', $codepaysuser);
$smarty->assign('nompaysuser', $nompaysuser);

 

Et voilà, vous avez maintenant de disponible pour toutes vos pages prestashop, les deux variables globales :

codepaysuser qui vous donne le pays en ISO : ex : FR

nompaysuser qui vous donne le pays au complet : ex : FRANCE

 

Pour les utiliser dans un .tpl par exemple :

dans un des DIV du tpl :

pour afficher le pays :

Your country : {$nompaysuser}

 

ou pour faire un test sur le code pays :

 
{If ($codepaysuser=='US')}						
			<-- mettre ici le code a executer si condition vraie -->
     {else}
		  <-- mettre ici le code a executer si condition fausse -->
{/if}

 

 

:)

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

  • 1 month later...
  • 11 months later...
  • 3 months later...

Je déterre un peu le sujet mais j'ai effectué les modifications données sur PS 1.5.5 et cela ne fonctionne malheureusement pas, le test suivant entre autre ne donne aucune valeur :

Your country : {$nompaysuser}

Je souhaite simplement arriver à afficher sur ma page d’accueil un message personnalisé pour les utilisateurs belges bien évidemment avant qu'ils n'aient créé un compte, c'est pourquoi je m'intéressait à cette fonction.

 

Si quelqu’un a réussi à faire fonctionner ce code ou a une idée je suis preneur  :)

 

Merci !

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 months later...
  • 8 months later...

Merci pour le partage, ça marche parfaitement sur 1.6

par rapport au code, il suffit d'initialiser la variable $gi avant la condition car on ne rentre pas tjs dedans : 

protected function geolocationManagement($default_country)
	{
		
		//surcharge de la méthode pour avoir sur tout le site l'adresse du pays de l'utilisateur
		global $codeCountryUser,$nameCountryUser,$smarty;
		if (!in_array($_SERVER['SERVER_NAME'], array('localhost', '127.0.0.1')))
		{
		
			/* Check if Maxmind Database exists */
			if (file_exists(_PS_GEOIP_DIR_.'GeoLiteCity.dat'))
			{	
				include_once(_PS_GEOIP_DIR_.'geoipcity.inc');
				$gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD);
				/*MODIFICATIONS*/
				$codeCountryUser  = geoip_country_code_by_addr($gi, Tools::getRemoteAddr()); /* recuperation ISO pays */
				$nameCountryUser  = geoip_country_name_by_addr($gi, Tools::getRemoteAddr()); /* recuperation Nom du pays */
				$smarty->assign('codeCountryUser', $codeCountryUser);
				$smarty->assign('nameCountryUser', $nameCountryUser);
				/* fin des modifications*/
				
				if (!isset($this->context->cookie->iso_code_country) || (isset($this->context->cookie->iso_code_country) && !in_array(strtoupper($this->context->cookie->iso_code_country), explode(';', Configuration::get('PS_ALLOWED_COUNTRIES')))))
				{
					$record = geoip_record_by_addr($gi, Tools::getRemoteAddr());
					

					if (is_object($record))
					{
						if (!in_array(strtoupper($record->country_code), explode(';', Configuration::get('PS_ALLOWED_COUNTRIES'))) && !FrontController::isInWhitelistForGeolocation())
						{

a+

Link to comment
Share on other sites

  • 6 months later...

Bonjour j'ai un petit soucis J'ai bien ajouté la langue française (car je ne sais pourquoi mon prestashop était en anglais)

Je me retrouve face à deux soucis:

 

1- Dans le back office (coordonnés et magasin) ainsi que sur le front-office ( à l'enregistrement client ) j'entre le pays france et prestashop me dit "Une adresse localisée dans un pays contenant des états doit sélectionner un état"

 

2- soucis les modules n'ont pas tous pris la langue française et qu'en j'essai la traduction de module prestashop me dit :"Attention, votre hébergement utilise le patch de sécurité Suhosin pour PHP, qui limite le nombre maximal de champs autorisés dans un formulaire400 pour suhosin.post.max_vars.

400 pour suhosin.request.max_vars.
Veuillez contacter votre hébergeur pour augmenter la limite de Suhosin à au moins 931, ou vous devrez modifier les fichiers de traduction." 

 

Je suis chez hostpapa auriez vous des solutions à mes deux soucis que je puisse régler moi même dans un délai bref ?

 

Merci d'avance

m Coordonnées et magasins  Coordonnées et magasins
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...