Перейти к содержимому


Фото
* * * * * 7 голосов

Определение города посетителя


Best Answer insider , 26.10.2014 - 23:21

Готовый код вставки в любое место сайта с указанием города, региона и страны.

<script src="http://yastatic.net/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
  window.onload = function () {
      jQuery("#user-city").text(ymaps.geolocation.city);
      jQuery("#user-region").text(ymaps.geolocation.region);
	  jQuery("#user-country").text(ymaps.geolocation.country);
  }
</script>
<script src="http://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU" type="text/javascript"></script>
<div id="user-city"></div> <div id="user-region"></div> <div id="user-country"></div>
Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
62 ответов в теме

#41 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 6 697 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 20.05.2017 - 13:07


Кто-то придумал как выкрутиться в Украине в связи с блокировкой Яши? Может есть аналоги по определению города?


Как это связано с Simpla CMS?

#42 Vladq

Vladq
  • Пользователь
  • 149 сообщений

Опубликовано 21.05.2017 - 01:16

Кто-то придумал как выкрутиться в Украине в связи с блокировкой Яши? Может есть аналоги по определению города?

 

Есть аналог. Держи

 

//Определение города по IP
    var user_ip = $('.user_ip span').text();
        $.get('http://api.sypexgeo.net/json/'+user_ip,
        function(data){
            $('.user_city').html('<strong></strong> '+data.city.name_ru);
        });

 

В нужном месте

<p class="user_city"></p> 

 

 

 



#43 tsybart

tsybart
  • Пользователь
  • 221 сообщений

Опубликовано 21.05.2017 - 21:13

Есть аналог. Держи

 

//Определение города по IP
    var user_ip = $('.user_ip span').text();
        $.get('http://api.sypexgeo.net/json/'+user_ip,
        function(data){
            $('.user_city').html('<strong></strong> '+data.city.name_ru);
        });

 

В нужном месте

<p class="user_city"></p> 

 

Спасибо! Но не будет работать. У вас еще перед этим выводится IP в .user_ip span

 

Выводите средствами simpla?


Изменено: tsybart, 21.05.2017 - 21:14


#44 mishanya

mishanya
  • Фрилансер
  • 2 550 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 21.05.2017 - 21:19

Спасибо! Но не будет работать. У вас еще перед этим выводится IP в .user_ip span

 

Выводите средствами simpla?

 

<div class="user_ip"><span>{$smarty.server.REMOTE_ADDR}</span></div>


#45 Vladq

Vladq
  • Пользователь
  • 149 сообщений

Опубликовано 21.05.2017 - 21:40

Спасибо! Но не будет работать. У вас еще перед этим выводится IP в .user_ip span

 

Выводите средствами simpla?


перед самим скриптом вставить где нибудь

<div id="user_ip" style="display: none;"><span>{$smarty.server.REMOTE_ADDR}</span></div>

Тогда

<p class="user_city"></p> 

Будет выводить само названия города.



Вот еще один альтернативный сервис, более шустрый, и более точный к украинским IP

 

 

<script>
     //Определение города по IP
    var user_ip = $('.user_ip span').text();
        $.get('http://api.2ip.ua/geo.json?ip='+user_ip,
        function(data){
            $('.user_city').html('<strong></strong> '+data.city_rus);
        });
      </script>


#46 tsybart

tsybart
  • Пользователь
  • 221 сообщений

Опубликовано 21.05.2017 - 22:55


перед самим скриптом вставить где нибудь

<div id="user_ip" style="display: none;"><span>{$smarty.server.REMOTE_ADDR}</span></div>

Тогда

<p class="user_city"></p> 

Будет выводить само названия города.



Вот еще один альтернативный сервис, более шустрый, и более точный к украинским IP

 

 

<script>
     //Определение города по IP
    var user_ip = $('.user_ip span').text();
        $.get('http://api.2ip.ua/geo.json?ip='+user_ip,
        function(data){
            $('.user_city').html('<strong></strong> '+data.city_rus);
        });
      </script>

 

спасибо!!

 

у этих ребят 2ip.ua бесплатно только до 100 запросов в день + нету https :(



#47 tsybart

tsybart
  • Пользователь
  • 221 сообщений

Опубликовано 21.05.2017 - 23:04

Кстати, у sypexgeo, есть сервер в Украине: https://ua.sxgeo.city/json/



#48 Otto

Otto
  • Пользователь
  • 2 сообщений
  • Пользователь
  • Откуда:Краснодар

Опубликовано 27.05.2017 - 08:18

Есть аналог. Держи

//Определение города по IP
    var user_ip = $('.user_ip span').text();
        $.get('http://api.sypexgeo.net/json/'+user_ip,
        function(data){
            $('.user_city').html('<strong></strong> '+data.city.name_ru);
        });
 
В нужном месте
<p class="user_city"></p> 


Спасибо! А как бы ещё все это дело кешировать? А то доходит до 30 просмотров на посетителя.

Изменено: Otto, 27.05.2017 - 08:29


#49 ahmed

ahmed
  • Пользователь
  • 172 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 27.05.2017 - 10:10

Спасибо! А как бы ещё все это дело кешировать? А то доходит до 30 просмотров на посетителя.

 

В чистом виде никак. Надо программировать в PHP.

И к тому же для кеширования  намного лучше использовать сервисы, дающие в ответе диапазон IP, например http://ipgeobase.ru/.

Иначе эффективность будет весьма низкой...



#50 Otto

Otto
  • Пользователь
  • 2 сообщений
  • Пользователь
  • Откуда:Краснодар

Опубликовано 27.05.2017 - 17:54

Вот что то похожее... http://www.ipinfodb....on_api_json.php Если кто готов помочь с кешированием $$$ прошу в ЛС

#51 mar

mar
  • Пользователь
  • 7 сообщений
  • Дизайн, Программирование
  • Версия CMS:2.x
  • Откуда:UA

Опубликовано 09.06.2017 - 10:37

Вот что то похожее... http://www.ipinfodb....on_api_json.php Если кто готов помочь с кешированием $$$ прошу в ЛС

А что кешировать то?

Как часто чиcтить кеш будем?

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

Неуправляемый и быстрорастущий кеш могу привести код (ниже).

Чистить вызывая ф-цию clear_cache Можно кроном 1 раз в сутки - можно 1 раз в неделю ... и т .д.

 

Вот может старый классический способ кеширования , им даже DLE грешило.

 

$your_ip=$_SERVER['REMOTE_ADDR'];
/*Можно еще поизвращаться и пытаться определять другими переменными МИМО прокси*/
$cache_in=get_vars($your_ip);
/* Проверяю есть ли кеш с номером этого IP*/
if(!$cache_in){
/*Проверяем соответствие IP городу,стрне и записываем данные методом какой ВЫ выберете*/
$cache_in="/*Перечень данных ВАМ интересных*/";
set_vars($your_ip,$cache_in);
}
/*Выводим данные ВАМ интересные*/
print $cache_in;


/*Вспомогательные ф-ции**/
/*Убийца кеша*/
function clear_cache($cache_area = false){
$dir="."; //Путь где файлы кеша
    if ($cache_area){
    $filename = $dir.'/temp/cache/'.$cache_area.'.tmp';
    @unlink($filename);
    } else {
    $fdir = opendir($dir.'/tmp/cache');
    while ($file = readdir($fdir)){
        if ($file != '.' and $file != '..' and $file != '.htaccess' and $file != 'system'){
                    @unlink($dir.'/temp/cache/'.$file);
            }
        }
    }
}

/*Установим кеш на неопределенное время*/
function set_vars ($file="default", $data){
$dir="."; //Путь где файлы кеша
    @$filename = $dir.'/temp/cache/'.$file.'.tmp';

    $fp = @fopen($filename, 'wb+');
    @fwrite($fp, serialize($data) );
    @fclose($fp);

    @chmod($filename, 0666);
}

/*Возьмем данные если они есть*/
function get_vars ($file="default"){
$dir="."; //Путь где файлы кеша
    $filename = $dir.'/temp/cache/'.$file.'.tmp';

    if (!@filesize($filename)){
        return false;
    }

    return unserialize(file_get_contents($filename));

}

 


Изменено: mar, 09.06.2017 - 10:50


#52 Mila

Mila
  • Пользователь
  • 3 сообщений
  • Дизайн
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 24.08.2017 - 09:08

Спасибо! А как бы ещё все это дело кешировать? А то доходит до 30 просмотров на посетителя.

куда его поместить?)поясни плиз



#53 Chudo

Chudo
  • Пользователь
  • 86 сообщений
  • Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Саратов

Опубликовано 14.09.2017 - 06:10

Друзья, привет! Помогите пожалуйста организовать работу скрипта таким образом, что бы заходя на сайт site.ru скрипт понимал что к нему зашли из региона "Х" и он оставлял нас на странице site.ru, зайдя из региона "Х2" нас перебрасывало на поддомен х2.site.ru, и заходя из региона "Х3" нас перебрасывало бы на поддомен х3.site.ru. Не пойму какое условие нужно написать.

Использую данный скрипт

 

<script src="http://yastatic.net/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
  window.onload = function () {
      jQuery("#user-region").text(ymaps.geolocation.region);
  }
</script>
<script src="http://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU" type="text/javascript"></script>
<div id="user-region"></div>

Изменено: Chudo, 14.09.2017 - 06:15


#54 loxter

loxter
  • Забаненый
  • 118 сообщений
  • Дизайн
  • Откуда:paris

Опубликовано 14.09.2017 - 09:29

reg=ymaps.geolocation.region
if(reg=='Курская область'){
location.href='//х2.site.ru/'
}
if(reg=='Брянская область'){
location.href='//х3.site.ru/'
}

#55 Chudo

Chudo
  • Пользователь
  • 86 сообщений
  • Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Саратов

Опубликовано 14.09.2017 - 12:19

reg=ymaps.geolocation.region
if(reg=='Курская область'){
location.href='//х2.site.ru/'
}
if(reg=='Брянская область'){
location.href='//х3.site.ru/'
}


Спасибо большое, работает)



#56 Dmitry86

Dmitry86
  • Пользователь
  • 138 сообщений
  • Пользователь
  • Откуда:Мск

Опубликовано 02.12.2017 - 22:23

потому что айди должен быть уникальным у всех объектов. соответсвенно вы ставите три ссылки с одним айди и вам вставляет только на первую.

 

для множества используйте классы.

<script src="http://yastatic.net/jquery/2.1.1/jquery.min.js"></script>
  <script type="text/javascript"> 
  window.onload = function () {
    if(ymaps.geolocation.region == 'Москва и Московская область'){
       jQuery(".region-phone").text('+7 (495) 000-00-00');
       jQuery(".region-phone-href").attr('href', 'tel:+78000000000');
     } else {
       jQuery(".region-phone").text('+7 (800) 000-00-00');
       jQuery(".region-phone-href").attr('href', 'tel:+78000000000');
   }
}
</script>
<script src="http://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU" type="text/javascript"></script>
<a class="region-phone-href" href="#"><div class="region-phone"></div></a>

 

Добрый день! Подскажите, пожалуйста, если необходимо, чтобы информация показывалась в зависимости не от одного города, а например, если город посетителя есть в списке городов (в массиве), то есть

if(ymaps.geolocation.city == 'название города есть в массиве городов')

 

Заране благодарю за помощь!



#57 mishanya

mishanya
  • Фрилансер
  • 2 550 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Ukraine

Опубликовано 02.12.2017 - 23:25

Добрый день! Подскажите, пожалуйста, если необходимо, чтобы информация показывалась в зависимости не от одного города, а например, если город посетителя есть в списке городов (в массиве), то есть

if(ymaps.geolocation.city == 'название города есть в массиве городов')

 

Заране благодарю за помощь!

 

var cities = ['Москва', 'Новоибирск', 'Казань'];
if(cities.indexOf(ymaps.geolocation.city)>-1) {
alert('Вы в нужном городе');
}


#58 Dmitry86

Dmitry86
  • Пользователь
  • 138 сообщений
  • Пользователь
  • Откуда:Мск

Опубликовано 02.12.2017 - 23:33

var cities = ['Москва', 'Новоибирск', 'Казань'];
if(cities.indexOf(ymaps.geolocation.city)>-1) {
alert('Вы в нужном городе');
}

 

Спасибо Мишаня, большое! Я ещё вот такой вариант нашел, вроде тоже работает)

		<script type="text/javascript">
			window.onload = function () {
				var cities = ['Москва','Воронеж','Магадан'];
				
				if(cities.join().search(ymaps.geolocation.city) != -1) {
      				jQuery(".user-city").text('текст 1');
      			} else {
      				jQuery(".user-city").text('текст 2');
      			}
			}
  		</script>


#59 jonny008

jonny008
  • Пользователь
  • 106 сообщений

Опубликовано 25.01.2018 - 09:46

Здравствуйте. 

 

Пытаюсь назначить город в переменную smarty. 

<script type="text/javascript">
  window.onload = function () {
     
      var gorod;
      gorod = ymaps.geolocation.city;
      
      {assign var=user_region value = 'gorod'};
      
  }


</script>


{$user_region}

Вообще никак не работает. Вопрос конечно глупый, но с javascript вообще никак. Подскажите пожалуйста, что не так.



#60 Kosjak76

Kosjak76
  • Модератор
  • 3 768 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 25.01.2018 - 10:44

Все не так...

Смарти работает на сервере при генерации страницы, а джаваскрипт - в браузере юзера.






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых