noflipar Posted March 6, 2020 Share Posted March 6, 2020 Tenemos un Prestashop 1.7.6.1 con multitienda y 4 URLs diferentes en las que cada una de ellas es la misma tienda pero con precios diferentes para diferentes países. Necesitamos que cuando entres a la web, te geolocalice y te lleve al dominio de la tienda correspondiente. Ejemplo: dominio.com (web principal) europa.dominio.com usa.dominio.com uk.dominio.com Si entro en dominio.com desde EEUU me redireccione a usa.dominio.com. Hay que tener en cuenta que sí estoy en una categoría, producto, cms, etc debe redirigir a la pagina concreta. Ejemplo: Entro a dominio.com/es/1_camisetas desde EEUU y que me lleve a usa.dominio.com/es/1_camisetas Alguien me puede echar una mano? Muchas gracias! Link to comment Share on other sites More sharing options...
gusman126 Posted March 6, 2020 Share Posted March 6, 2020 Yo uso este codigo , la ultima vez en PS 1.6 Lo añado a un modulo y que este enganchado al "header" Obviamente lo debes cambiar a tus dominios y paises También hace falta el fichero GeoLiteCity.dat, es el mismo fichero que usa el prestashop para geolocalizar include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $records = geoip_record_by_addr($gi, Tools::getRemoteAddr()); $URL_P = $_SERVER['REQUEST_URI']; $pais = $records->country_code; if ($pais == 'AD' | $pais == 'AT' | $pais == 'BE' | $pais == 'BG' | $pais == 'HR' | $pais == 'CY' | $pais == 'CZ' | $pais == 'DK' | $pais == 'EE' | $pais == 'FI' | $pais == 'FR' | $pais == 'DE' | $pais == 'GR' | $pais == 'HU' | $pais == 'IS' | $pais == 'IE' | $pais == 'IT' | $pais == 'LT' | $pais == 'LU' | $pais == 'MT' | $pais == 'NL' | $pais == 'NO' | $pais == 'PL' | $pais == 'RO' | $pais == 'SK' | $pais == 'SI' | $pais == 'SE' | $pais == 'CH' | $pais == 'TR' ){ $pais = 'CE'; } if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/BotLink|ahoy|AlkalineBOT|anthill|appie|arale|araneo|AraybOt|ariadne|arks|ATN_Worldwide|Atomz |bbot|Bjaaland|Ukonline|borg\-bot\/0\.9|boxseabot|bspider|calif|christcrawler|CMC\/0\.01|combine|confuzzledbot|CoolBot|cosmos|PayPal IPN|paypal|PayPal| Internet Cruiser Robot|cusco|cyberspyder|cydralspider|desertrealm, desert realm|digger|DIIbot|grabber|downloadexpress|DragonBot| dwcp|ecollector|ebiness|elfinbot|esculapio|esther|fastcrawler|FDSE|FELIX IDE|ESI|fido|H�m�h�kki|KIT\-Fireball|fouineur|Freecrawl| gammaSpider|gazz|gcreep|golem|googlebot|AdsBot-Google|Googlebot-Image|Googlebot-News|Google-Structured-Data-Testing-Tool|pagespeed|insights|griffon|Gromit|gulliver|gulper|hambot|havIndex|hotwired|htdig|iajabot|INGRID\/0\.1|Informant| InfoSpiders|inspectorwww|irobot|Iron33|JBot|jcrawler|Teoma|Jeeves|jobo|image\.kapsi\.net|KDD\-Explorer|ko_yappo_robot|label\-grabber| larbin|legs|Linkidator|linkwalker|Lockon|logo_gif_crawler|marvin|mattie|mediafox|MerzScope|NEC\-MeshExplorer|MindCrawler|udmsearch|moget| Motor|msnbot|muncher|muninn|MuscatFerret|MwdSearch|sharp\-info\-agent|WebMechanic|NetScoop|newscan\-online|ObjectsSearch|Occam|Orbsearch\/1\.0| packrat|pageboy|ParaSite|patric|pegasus|perlcrawler|phpdig|piltdownman|Pimptrain|pjspider|PlumtreeWebAccessor|PortalBSpider|psbot|Getterrobo\-Plus| Raven|RHCS|RixBot|roadrunner|Robbie|robi|RoboCrawl|robofox|Scooter|Search\-AU|searchprocess|Senrigan|Shagseeker|sift|SimBot|Site Valet|skymob| SLCrawler\/2\.0|slurp|ESI|snooper|solbot|speedy|spider_monkey|SpiderBot\/1\.0|spiderline|nil|suke|http:\/\/www\.sygol\.com|tach_bw|TechBOT| templeton|titin|topiclink|UdmSearch|urlck|Valkyrie libwww\-perl|verticrawl|Victoria|void\-bot|Voyager|VWbot_K|crawlpaper|wapspider|WebBandit\/1\.0| webcatcher|T\-H\-U\-N\-D\-E\-R\-S\-T\-O\-N\-E|WebMoose|webquest|webreaper|webs|webspider|WebWalker|wget|winona|whowhere|wlm|WOLP|WWWC|none|XGET| Nederland\.zoek|AISearchBot|woriobot|NetSeer|Nutch/i', $_SERVER['HTTP_USER_AGENT'] ) ){ }else { $dominiourl =$_SERVER['SERVER_NAME']; switch ($pais) { case 'ES': if ($dominiourl != 'dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'usa.dominio.com') header("Location: https://dominio.com".$URL_P.""); break; case 'PT': if ($dominiourl != 'dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'usa.dominio.com') header("Location: https://dominio.com".$URL_P.""); break; case 'CE' : if ($dominiourl != 'ce.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'usa.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://ce.dominio.com".$URL_P.""); break; case 'US': if ($dominiourl != 'usa.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://usa.dominio.com".$URL_P.""); break; case 'MX': if ($dominiourl != 'usa.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://usa.dominio.com".$URL_P.""); break; case 'GB' : if ($dominiourl != 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'usa.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://uk.dominio.com".$URL_P.""); break; case 'AU': if ($dominiourl != 'usa.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://usa.dominio.com".$URL_P.""); break; default : if ($dominiourl != 'usa.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://usa.dominio.com".$URL_P.""); break; } } } 1 Link to comment Share on other sites More sharing options...
noflipar Posted March 6, 2020 Author Share Posted March 6, 2020 Muchas gracias gusman126 voy a probarlo, En cualquier caso, no hay un algún módulo específico para la versión 1.7 que nos permita vender internacionalmente, geolocalizar y mostrar distintas tarifas por paises? He visto que algunas tiendas con prestashop que lo hacen, pero desconozco si utilizan algún modulo específico o es un desarrollo manual. Link to comment Share on other sites More sharing options...
gusman126 Posted March 6, 2020 Share Posted March 6, 2020 hace 15 minutos, noflipar dijo: Muchas gracias gusman126 voy a probarlo, En cualquier caso, no hay un algún módulo específico para la versión 1.7 que nos permita vender internacionalmente, geolocalizar y mostrar distintas tarifas por paises? He visto que algunas tiendas con prestashop que lo hacen, pero desconozco si utilizan algún modulo específico o es un desarrollo manual. Si que hay varios modulos, no recuerdo si los han actualizado a 1.7 Como has hecho, al final si son diferentes productos, tarifas y configuraciones, o se tiene multiples prestashop o se usa multitiendas. Siempre con la redirección por pais, al ser multitiendas puedes tener precios completamente diferentes 1 Link to comment Share on other sites More sharing options...
joseantgv Posted March 6, 2020 Share Posted March 6, 2020 hace 1 hora, noflipar dijo: Muchas gracias gusman126 voy a probarlo, En cualquier caso, no hay un algún módulo específico para la versión 1.7 que nos permita vender internacionalmente, geolocalizar y mostrar distintas tarifas por paises? He visto que algunas tiendas con prestashop que lo hacen, pero desconozco si utilizan algún modulo específico o es un desarrollo manual. Te envío MP. 1 Link to comment Share on other sites More sharing options...
noflipar Posted March 9, 2020 Author Share Posted March 9, 2020 (edited) On 3/6/2020 at 6:07 PM, gusman126 said: Yo uso este codigo , la ultima vez en PS 1.6 Lo añado a un modulo y que este enganchado al "header" Obviamente lo debes cambiar a tus dominios y paises También hace falta el fichero GeoLiteCity.dat, es el mismo fichero que usa el prestashop para geolocalizar include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $records = geoip_record_by_addr($gi, Tools::getRemoteAddr()); $URL_P = $_SERVER['REQUEST_URI']; $pais = $records->country_code; if ($pais == 'AD' | $pais == 'AT' | $pais == 'BE' | $pais == 'BG' | $pais == 'HR' | $pais == 'CY' | $pais == 'CZ' | $pais == 'DK' | $pais == 'EE' | $pais == 'FI' | $pais == 'FR' | $pais == 'DE' | $pais == 'GR' | $pais == 'HU' | $pais == 'IS' | $pais == 'IE' | $pais == 'IT' | $pais == 'LT' | $pais == 'LU' | $pais == 'MT' | $pais == 'NL' | $pais == 'NO' | $pais == 'PL' | $pais == 'RO' | $pais == 'SK' | $pais == 'SI' | $pais == 'SE' | $pais == 'CH' | $pais == 'TR' ){ $pais = 'CE'; } if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match('/BotLink|ahoy|AlkalineBOT|anthill|appie|arale|araneo|AraybOt|ariadne|arks|ATN_Worldwide|Atomz |bbot|Bjaaland|Ukonline|borg\-bot\/0\.9|boxseabot|bspider|calif|christcrawler|CMC\/0\.01|combine|confuzzledbot|CoolBot|cosmos|PayPal IPN|paypal|PayPal| Internet Cruiser Robot|cusco|cyberspyder|cydralspider|desertrealm, desert realm|digger|DIIbot|grabber|downloadexpress|DragonBot| dwcp|ecollector|ebiness|elfinbot|esculapio|esther|fastcrawler|FDSE|FELIX IDE|ESI|fido|H�m�h�kki|KIT\-Fireball|fouineur|Freecrawl| gammaSpider|gazz|gcreep|golem|googlebot|AdsBot-Google|Googlebot-Image|Googlebot-News|Google-Structured-Data-Testing-Tool|pagespeed|insights|griffon|Gromit|gulliver|gulper|hambot|havIndex|hotwired|htdig|iajabot|INGRID\/0\.1|Informant| InfoSpiders|inspectorwww|irobot|Iron33|JBot|jcrawler|Teoma|Jeeves|jobo|image\.kapsi\.net|KDD\-Explorer|ko_yappo_robot|label\-grabber| larbin|legs|Linkidator|linkwalker|Lockon|logo_gif_crawler|marvin|mattie|mediafox|MerzScope|NEC\-MeshExplorer|MindCrawler|udmsearch|moget| Motor|msnbot|muncher|muninn|MuscatFerret|MwdSearch|sharp\-info\-agent|WebMechanic|NetScoop|newscan\-online|ObjectsSearch|Occam|Orbsearch\/1\.0| packrat|pageboy|ParaSite|patric|pegasus|perlcrawler|phpdig|piltdownman|Pimptrain|pjspider|PlumtreeWebAccessor|PortalBSpider|psbot|Getterrobo\-Plus| Raven|RHCS|RixBot|roadrunner|Robbie|robi|RoboCrawl|robofox|Scooter|Search\-AU|searchprocess|Senrigan|Shagseeker|sift|SimBot|Site Valet|skymob| SLCrawler\/2\.0|slurp|ESI|snooper|solbot|speedy|spider_monkey|SpiderBot\/1\.0|spiderline|nil|suke|http:\/\/www\.sygol\.com|tach_bw|TechBOT| templeton|titin|topiclink|UdmSearch|urlck|Valkyrie libwww\-perl|verticrawl|Victoria|void\-bot|Voyager|VWbot_K|crawlpaper|wapspider|WebBandit\/1\.0| webcatcher|T\-H\-U\-N\-D\-E\-R\-S\-T\-O\-N\-E|WebMoose|webquest|webreaper|webs|webspider|WebWalker|wget|winona|whowhere|wlm|WOLP|WWWC|none|XGET| Nederland\.zoek|AISearchBot|woriobot|NetSeer|Nutch/i', $_SERVER['HTTP_USER_AGENT'] ) ){ }else { $dominiourl =$_SERVER['SERVER_NAME']; switch ($pais) { case 'ES': if ($dominiourl != 'dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'usa.dominio.com') header("Location: https://dominio.com".$URL_P.""); break; case 'PT': if ($dominiourl != 'dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'usa.dominio.com') header("Location: https://dominio.com".$URL_P.""); break; case 'CE' : if ($dominiourl != 'ce.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'usa.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://ce.dominio.com".$URL_P.""); break; case 'US': if ($dominiourl != 'usa.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://usa.dominio.com".$URL_P.""); break; case 'MX': if ($dominiourl != 'usa.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://usa.dominio.com".$URL_P.""); break; case 'GB' : if ($dominiourl != 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'usa.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://uk.dominio.com".$URL_P.""); break; case 'AU': if ($dominiourl != 'usa.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://usa.dominio.com".$URL_P.""); break; default : if ($dominiourl != 'usa.dominio.com' || $dominiourl == 'uk.dominio.com' || $dominiourl == 'ce.dominio.com' || $dominiourl == 'dominio.com') header("Location: https://usa.dominio.com".$URL_P.""); break; } } } ¿Alguien sabe dónde se encuentra el geoipcity.inc en la versión de prestashop 1.7? o ¿cómo puedo obtener el pais desde el que se conecta el usuario en la 1.7? Edited March 9, 2020 by noflipar (see edit history) Link to comment Share on other sites More sharing options...
noflipar Posted March 9, 2020 Author Share Posted March 9, 2020 He logrado adaptar el código para que funcione en la versión 1.7, ahora geolocaliza la ip y te redirecciona a la multitienda con su subdominio correspondiente, pero me gustaría que en caso de no resolver la ip, tener la opción de seleccionar manualmente el país y el idioma y que eso priorice sobre el código en el header, lo he intentado hacer con if pero entra en bucle no carga la tienda. Alguien tiene alguna idea de como hacer? Muchas gracias, Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now