This wiki shows how to get the geolocation info of the client using another server API It could be write also as extension but there are a lots of APIs that change the below code So, I wrote the below code that works for one of them (using www.geoplugin.net)
Add the file Geolocation.php in protected/components
class Geolocation {
    public static $ipaddress = null;
    public static $clientInfoLocation = null;
    
    public static function get_client_ip() {
        if (self::$ipaddress == null) {
            if (isset($_SERVER['HTTP_CLIENT_IP']))
                $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
            else if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
                $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
            else if (isset($_SERVER['HTTP_X_FORWARDED']))
                $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
            else if (isset($_SERVER['HTTP_FORWARDED_FOR']))
                $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
            else if (isset($_SERVER['HTTP_FORWARDED']))
                $ipaddress = $_SERVER['HTTP_FORWARDED'];
            else if (isset($_SERVER['REMOTE_ADDR']))
                $ipaddress = $_SERVER['REMOTE_ADDR'];
            else
                $ipaddress = '127.0.0.1';
        }
        return self::$ipaddress;
    }
    public static function getClientInfoLocation() {
        if (self::$clientInfoLocation == null)
            self::$clientInfoLocation = (unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . self::get_client_ip())));
        return self::$clientInfoLocation;
    }
    public static function getClientCountry() {
        $dt = self::getClientInfoLocation();
        return strtolower($dt['geoplugin_countryName']);
    }
    public static function getClientLangCode() {
        $dt = self::getClientInfoLocation();
        return strtolower($dt['geoplugin_countryCode']);
    }
}
Now, In any controller you chould use Geolocation::getClientCountry() or Geolocation::getClientLangCode()
If you have any questions, please ask in the forum instead.
Signup or Login in order to comment.