efer33 Posted December 16, 2016 Share Posted December 16, 2016 (edited) Buenos días: Tengo montado un prestashop, con una multitienda, una que seria la pagina principal y otra que seria para fuera de españa con precios diferentes (internacional). Pagina principal: www.misitio.com Pagina fuera: www.misitio.com/int Lo que quisiera saber es como puedo hacer para que cuando se alguien acceda desde fuera de España le redireccione a la web www.misitio.com/int. He probado a hacer esto en el index.php include("config/geoiploc.php"); $ip = $_SERVER["REMOTE_ADDR"]; if (getCountryFromIP($ip)<>"ES"){ header ("Location: https://www.misitio.com/int/en/"); } require(dirname(__FILE__).'/config/config.inc.php'); Dispatcher::getInstance()->dispatch(); Tambien he probado a ponerlo en el config al final de todo Pero no funciona, alguna idea de como podria hacerlo. Gracias geoiploc.zip Edited December 19, 2016 by efer33 (see edit history) Link to comment Share on other sites More sharing options...
ventura Posted December 16, 2016 Share Posted December 16, 2016 Prestashop incluye la opcion por defecto de geolocalizacion geoip. Luego para redireccionar deberás hacerlo desde classes\controller\FrontController.php en la funcion init Link to comment Share on other sites More sharing options...
efer33 Posted December 16, 2016 Author Share Posted December 16, 2016 Prestashop incluye la opcion por defecto de geolocalizacion geoip. Luego para redireccionar deberás hacerlo desde classes\controller\FrontController.php en la funcion init Deberia activar la geolocalizacion, pero donde pongo los redireccionamientos. Gracias y perdón por las molestias Link to comment Share on other sites More sharing options...
ventura Posted December 16, 2016 Share Posted December 16, 2016 En la funcion del archivo indicado en el anterior mensaje, debajo de parent:init also asi por ejemplo: include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); switch($record->country_code){ case 'FR' : header('Location: https://www.prestashop.com/'); break; case 'DE' : header('Location: https://www.prestashop.com/forums'); break; default: break; } Link to comment Share on other sites More sharing options...
efer33 Posted December 16, 2016 Author Share Posted December 16, 2016 (edited) En la funcion del archivo indicado en el anterior mensaje, debajo de parent:init also asi por ejemplo: include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); switch($record->country_code){ case 'FR' : header('Location: https://www.prestashop.com/'); break; case 'DE' : header('Location: https://www.prestashop.com/forums'); break; default: break; } Buenas tardes: Lo que probado pero me da un error 500 la página te ha redirigido demasiadas veces No tendrá algo que ver con la multitenda y la url virtual de esta? Edited December 16, 2016 by efer33 (see edit history) Link to comment Share on other sites More sharing options...
ventura Posted December 17, 2016 Share Posted December 17, 2016 Buenas tardes: Lo que probado pero me da un error 500 la página te ha redirigido demasiadas veces No tendrá algo que ver con la multitenda y la url virtual de esta? Es posible, te lo puse como ejemplo de punto de partida Link to comment Share on other sites More sharing options...
efer33 Posted December 19, 2016 Author Share Posted December 19, 2016 Es posible, te lo puse como ejemplo de punto de partida Alguna posible solución, me estoy volviendo loco con este tema. Mil gracias y disculpas Link to comment Share on other sites More sharing options...
ventura Posted December 19, 2016 Share Posted December 19, 2016 El ejemplo que te puse funciona sin problemas en un entorno que no es multitienda, para multitienda deberas condicionarlo a la tienda (id) establecida por defecto Link to comment Share on other sites More sharing options...
efer33 Posted December 19, 2016 Author Share Posted December 19, 2016 El ejemplo que te puse funciona sin problemas en un entorno que no es multitienda, para multitienda deberas condicionarlo a la tienda (id) establecida por defecto Perdona las molestias, pero no te comprendo. La Tienda por defecto, España el ID es 1 y la Fuera de España 4 Mil gracias por tu ayuda. Link to comment Share on other sites More sharing options...
efer33 Posted December 19, 2016 Author Share Posted December 19, 2016 Perdona las molestias, pero no te comprendo. La Tienda por defecto, España el ID es 1 y la Fuera de España 4 Mil gracias por tu ayuda. Lo que me he dado cuenta es que en la barra de direcciones, si pone la url a la que hay que redirigir, pero sale el error. Link to comment Share on other sites More sharing options...
ventura Posted December 19, 2016 Share Posted December 19, 2016 Una de ellas estará configurada como shop por defecto, en la opción de configuración de la multitienda estará seleccionada la que esta por defecto, también en la base de datos de tu instalación en la tabla configuration estará el registro PS_SHOP_DEFAULT con el id de la tienda seleccionada, esto sirve que puedas condicionar la redirección solo para la tienda por defecto if (Tools::getValue('id_shop') == Configuration::get('PS_SHOP_DEFAULT')) Link to comment Share on other sites More sharing options...
efer33 Posted December 19, 2016 Author Share Posted December 19, 2016 (edited) Una de ellas estará configurada como shop por defecto, en la opción de configuración de la multitienda estará seleccionada la que esta por defecto, también en la base de datos de tu instalación en la tabla configuration estará el registro PS_SHOP_DEFAULT con el id de la tienda seleccionada, esto sirve que puedas condicionar la redirección solo para la tienda por defecto if (Tools::getValue('id_shop') == Configuration::get('PS_SHOP_DEFAULT')) Muchas gracias, el código tiene quedar asi, no? public function init() { .... parent::init(); include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); if($record->country_code<>"ES"){ if (Tools::getValue('id_shop') == Configuration::get('PS_SHOP_DEFAULT')){ //Redireccionamiento a pagina fuera ESPAÑA } } .... } El Tools::getValue('id_shop') no devuelve nada Lo que tengo creado es el grupo y dentro del grupo las tiendas Edited December 19, 2016 by efer33 (see edit history) Link to comment Share on other sites More sharing options...
efer33 Posted December 19, 2016 Author Share Posted December 19, 2016 Muchas gracias, el código tiene quedar asi, no? public function init() { .... parent::init(); include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); if($record->country_code<>"ES"){ if (Tools::getValue('id_shop') == Configuration::get('PS_SHOP_DEFAULT')){ //Redireccionamiento a pagina fuera ESPAÑA } } .... } Lo que tengo creado es el grupo y dentro del grupo las tiendas Muchas gracias, el código tiene quedar asi, no? public function init() { .... parent::init(); include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); if($record->country_code<>"ES"){ if (Tools::getValue('id_shop') == Configuration::get('PS_SHOP_DEFAULT')){ //Redireccionamiento a pagina fuera ESPAÑA } } .... } Lo que tengo creado es el grupo y dentro del grupo las tiendas Muchas gracias, el código tiene quedar asi, no? public function init() { .... parent::init(); include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); if($record->country_code<>"ES"){ if (Tools::getValue('id_shop') == Configuration::get('PS_SHOP_DEFAULT')){ //Redireccionamiento a pagina fuera ESPAÑA } } .... } El Tools::getValue('id_shop') no devuelve nada Lo que tengo creado es el grupo y dentro del grupo las tiendas Ya he conseguido que funcione Link to comment Share on other sites More sharing options...
ventura Posted December 19, 2016 Share Posted December 19, 2016 Me alegro. Un saludo Link to comment Share on other sites More sharing options...
raul Posted April 14, 2018 Share Posted April 14, 2018 (edited) Hola tengo el mismo problema como quedaría el código final por favor Con este código se que es la base pero pasa esto include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); switch($record->country_code){ case 'CL' : header('Location: https://dominio.cl/'); break; case 'US' : header('Location: https://dominio.us/'); break; default: break; } La idea es que si son de Chile los envie al dominio para Chile y si son de Usa que los envie al dominio de Usa si no son de ninguno de esos países los deje en la tienda que este, pueden ver la pagina pero como catalogo sin poder comprar solo me falta es esta redirección no quiero meterme con el archivo htaccess Edited April 14, 2018 by raul agregar datos (see edit history) Link to comment Share on other sites More sharing options...
raul Posted April 14, 2018 Share Posted April 14, 2018 (edited) Encontré este código en la red pero no se si esta bien o donde colocarlo probé en FrontController.php en los lugares mencionados en este tema pero lo máximo que logre fue una redireccion desde el dominio.us al domio.cl pero al tratar de entrar al dominio.us con ip de usa de igual forma me envia al dominio.cl el código es este. public function hookDisplayHeader() { $this->redirect(); } public function redirect(){ 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; //comprobamos el pais y añadimos toda EU en una sola variable CE o EU 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'; } // Comprobamos que el usuario que ha conectado no un un "agente" o bot, de esta manera no vamos a redirigir a // a los bots de google googlebot|AdsBot-Google|Googlebot-Image|Googlebot-News|Google-Structured-Data-Testing-Tool|pagespeed|insights| // ni a otros bots conocidos, en esta lista solo hay algunos 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| 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 { // Si no es un Bot o agente conocido se redirigira segun el pais $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 '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; } } } Tengo 2 días ya tratando de buscarle una solución funcional para poder usar multitienda por país agregando una redireccion usando geolocalizacion geoip que trae por defecto Edited April 14, 2018 by raul editar el codigo (see edit history) Link to comment Share on other sites More sharing options...
raul Posted April 14, 2018 Share Posted April 14, 2018 Con este código logro hacer una redireccion desde el dominio.us al dominio.cl pero por lo que mire es una simple redireccion por dominio de defecto y no esta detectando la ip del país porque al tratar de entrar al dominio.us con ip de usa me envia de igual forma al dominio.cl include_once(_PS_GEOIP_DIR_.'geoipcity.inc'); $gi = geoip_open(realpath(_PS_GEOIP_DIR_.'GeoLiteCity.dat'), GEOIP_STANDARD); $record = geoip_record_by_addr($gi, Tools::getRemoteAddr()); $dominiourl =$_SERVER['SERVER_NAME']; switch ($pais) { case 'CL': if ($dominiourl != 'dominio.cl' || $dominiourl == 'dominio.us') header("Location: https://dominio.cl".$URL_P.""); break; case 'US': if ($dominiourl != 'dominio.us' || $dominiourl == 'dominio.cl') header("Location: https://dominio.us".$URL_P.""); break; default : if ($dominiourl != 'dominio.cl' || $dominiourl == 'dominio.us') header("Location: https://dominio.cl".$URL_P.""); break; } Link to comment Share on other sites More sharing options...
gusman126 Posted April 15, 2018 Share Posted April 15, 2018 (edited) Hola, El codigo que has puesto es algo generico por lo que se ve. fijate que pone dominio.XX, deberias cambiarlo por tu dominio por ejemplo google.cl, google.com prestashop.com, prestashop.,cl Ademas el codigo esta preparado para Europa, si es para Chile y todo el resto del mundo deberia ser asi Recuerda cambiar tudominio.cl por el tuyo He mirado y el ISO de chile no lo tengo claro, añade al codigo un echo Haz un "echo $pais" para mostrar el ISO public function redirect(){ 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 (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| 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 { // Si no es un Bot o agente conocido se redirigira segun el pais $dominiourl =$_SERVER['SERVER_NAME']; switch ($pais) { case 'CL': if ($dominiourl != 'tudominio.cl') header("Location: https://tudominio.cl".$URL_P.""); break; default : if ($dominiourl != 'tuotrodominio.us') header("Location: https://tuotrodominio.us".$URL_P.""); break; } } } como solo son 2 dominios, el de clile y otro en vez de usar un swith podrías usar un if if($pais == 'CL'){ if ($dominiourl != 'tudominio.cl' ) header("Location: https://tudominio.cl".$URL_P.""); }else{ if ($dominiourl != 'tuotrodominio.us') header("Location: https://tuotrodominio.us".$URL_P.""); } Edited April 15, 2018 by gusman126 (see edit history) 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