componente geo posicionamiento ip con cakephp
Con este componente podrás geo posicionar algunas secciones de tu web, mediante una base de datos con los países. Se puede Geoposiciar un site entero pero no es nada recomendable por motivos de SEO, ya que al señor Google no le gusta nada. Pero puede ser útil para algunos fragmentos de html, como módulos de tienda de diferentes paises, geo posicionamiento de publicidades, etc..
1.- Obtener la base de datos de GeoLite Descargar la última versión de la base de datos con los países de GeoLite. Tarda un poco porque son casi 19MB http://www.maxmind.com/download/geoip/database/geolitecity.dat-1.gz Cuando se descargue hay que ubicarlo en la siguiente ruta [CakeDirectorio]/webroot/files/geolitecity.dat
2.- Crea el componente de cakephp /app/controllers/components/geo_ip.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class GeoIpComponent extends Object {
function lookupIp($ip)
{
App::import('Vendor','geoipcity');
$gi = geoip_open("files/geolitecity.dat", GEOIP_STANDARD);
$result = geoip_record_by_addr($gi, $ip);
geoip_close($gi);
return get_object_vars($result);
}
function findIp()
{
if(getenv("HTTP_CLIENT_IP"))
return getenv("HTTP_CLIENT_IP");
elseif(getenv("HTTP_X_FORWARDED_FOR"))
return getenv("HTTP_X_FORWARDED_FOR");
else
return getenv("REMOTE_ADDR");
}
}
3.- Descargar los archivos de la API Descargar la API que controla la base de datos con las ciudades y países que has descargado en el punto 1. Esta API controla las consultas y accesos a la base de datos de GeoIP. Si quieres informarte mas sobre los métodos y otras funciones puedes verlo aquí: http://www.maxmind.com/app/php Descarga de la siguiente url: http://geolite.maxmind.com/download/geoip/api/php/ los siguientes archivos geoipregionvars.php, geoipcity.php, geoip.php y guárdalos en el siguiente path:
[CakeDirectorio]/app/vendors/geoipregionvars.php [CakeDirectorio]/app/vendors/geoipcity.php [CakeDirectorio]/app/vendors/geoip.php
4.- Implementar el Geo Posicionamiento en un controlador /app/controllers/geo_ip_controller.php
1
2
3
4
5
6
7
8
9
10
11
12
class GeoIpController extends AppController {
var $name = 'GeoIpSample';
var $components = Array('GeoIp');
function index() {
$ip = $this->GeoIp->findIp();
$ip_loc = $this->GeoIp->lookupIp($ip);
$this->set('user_ip', $ip);
$this->set('user_location', $ip_loc);
}
}
5.- Mostrar los resultados en una vista
1
2
<p><?=$user_location['city']?>, <?=$user_location['region']?> <?=$user_location['country_name']?> es mi lugar favorito.</p>
<p><small>Tu ip es: <?=$user_ip?></small></p>
Mostrar la longitud y latitud de los resultados obtenidos
1
2
3
4
<p>
<strong>Longitud:</strong> <?=$user_location['longitude']?><br/>
<strong>Latitud:</strong> <?=$user_location['latitude']?>
</p>
6.- Geo Posicionamiento permanente en todos los controllers
Si quieres geo posicionar algún elemento en concreto de tu web de manera permanente, y que este geo posicionamiento se lleve a cabo en todos los controllers lo tendrás que incluir en el app_controller.php
/app/controllers/app_controller.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class AppController extends Controller
{
var $components = Array('GeoIp');
function beforeFilter()
{
parent::beforeFilter();
$ip = $this->GeoIp->findIp();
$ip_loc = $this->GeoIp->lookupIp($ip);
// obtengo el codigo de pais y lo asigno a una variable.
$codigo_pais = $ip_loc['country_code'];
$this->set("codigo_pais",$codigo_pais);
}
}