Приветствую уважаемый посетитель нашего сайта. Извините что я давненько уже ничего нового не писал здесь, просто дел было очень много.
Сегодня же я нашел немного свободного времени, и хочу опубликовать здесь новую заметку о возможности отображения на своем сайте Геолокации данных пользователя, проще говоря заметка о том как отобразить на своем сайте страну, город и регион посетителя который к вам пришел на сайт.
Функция геолокация на сайте используется вебмастерами для многих целей, к примеру: если у вас готовый интернет магазин то можно для ваших посетителей для каждого региона, показывать контактную информацию конкретно вашего филиала в его городе, или же отобразить условия доставки заказов которые относятся к его региону, я часто использую возможности геолокации при написании уникальных текстов на сайт, это немного но дает кое какую уникальность написанным текстам.
При правильной настройке, геолокация на сайте так же может помочь вам улучшить конверсию в интернет магазине. Используя гео-локацию для сайта можно перенаправлять ваших посетителей на другие поддомены, которые конкретно настроены для региона посетителя, да собственно много для чего можно использовать данную функцию все примеры описывать не имеет смысла, каждый кто ищет как внедрить на сайт геолокацию думаю уже знает для чего она ему нужна и для каких целей.
Для того чтобы определить города посетителя и показать его на страницах вашего сайта, есть много самых разных способов, есть сложные методы определение города по IP пользователя, есть более простые методы реализации и вывода названия города посетителя на сайте, мы же сегодня будем рассматривать два варианта определения и вывода страны и города посетителя на вашем сайте, а именно рассмотрим простую реализацию которую предоставляет нам яндекс, а так же немного сложнее способ Sypex Geo от создателей замечательного продукта Sypex Dumper.
У каждого из указанных методов есть свои плюсы и минусы, поэтому давайте же рассмотрим оба варианта более детально. Я не буду углубляться в дебри, а опишу самые простые варианты и быстрое подключение на ваш сайт описанных выше методов вывода местонахождения пользователя на сайте, поэтому думаю с данной задачей следуя нашей инструкции справится любой начинающий Вебмастер, и так давайте уже приступим к делу и сделаем определение города по IP для сайта.
Определение города посетителя используя яндекс API.
Самое главное достоинство данного метода это его простота установки на ваш сайт, все что вам нужно сделать так это вставить готовый код определения города на свой сайт. Скрипт определения города работает просто безупречно, хотя в каких то маленьких населенных пунктах, может конечно не точно определить город и указать не ваш город, а местонахождения вашего интернет провайдера, но в основном скрипт очень удобен и прост в установке.
Но в данном методе есть и серьезный недостаток, которой и заставил по сути меня искать другие альтернативы определения города на сайте, как на своих проектах, так и при разработке сайтов для клиентов у которых основная аудитория из Украины. Как вы уже наверное знаете в Украине Яндекс под запретом и все запросы к нему блокируются интернет провайдерами, в связи с этим данную реализацию в Украине мы не можем использовать по крайней мере сейчас.
Хорошо, не буду вас мучить всей этой писаниной и приступим к реализации, установим на сайт геолокацию от Яндекса, которая выведет страну, регион и город посетителя вашего сайта.
Для начала проверьте что у вас подключена на сайте библиотека jquery, в большинстве сайтов она уже подключена но если же нет тогда добавьте на свой сайт между тегами <head> </head> следующий код:
1 |
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> |
Если же у Вас библиотека уже подключена то данный пункт можете пропустить. Следующим шагом будет подключения скрипта определения местонахождения посетителя а именно между теми же тегами <head> </head> добавьте следующий скрипт:
1 2 3 4 5 6 7 8 |
<script src="//api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=ru-RU" type="text/javascript"></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> |
Думаю в скрипте все понятно и описывать его не нужно. И так, скрипт вызова Яндекс API мы подключили, теперь в желаемом вами месте на вашем сайте, там где вы хотите вывести город добавьте следующий код:
1 2 3 |
<div><b>Ваша страна:</b> <span id="user-country"></span></div> <div><b>Ваш регион:</b> <span id="user-region"></span></div> <div><b>Ваш город:</b> <span id="user-city"></span></div> |
Вот собственно и все, теперь на вашем сайте будет отображаться страна, регион и город посетителя определенные Яндекс API.
Теперь давайте рассмотрим небольшой пример как можно использовать данный скрипт геолокации в деле. К примеру если вам нужно на своем сайте отобразить какой то текст, который должен показываться только для определенного города воспользуйтесь следующим кодом:
1 2 3 4 5 6 7 8 9 10 |
<script type="text/javascript"> window.onload = function () { var city = ymaps.geolocation.city; if(city == 'Хмельницкий'){ jQuery("#user-city").text('Бесплатная доставка по Хмельницкому'); } else { jQuery("#user-city").text('Доставка Новой почтой'); } } </script> |
Что данный пример делает? - Как вы думаю уже догадались, мы показываем для всех регионов текст "Доставка Новой почтой", но если же на сайт заходит пользователь из города Хмельницкий, то вместо указанного текста пользователю отобразится текст "Бесплатная доставка по Хмельницкому", по такому принципу вы можете добавлять любую динамическую информацию, адреса, телефоны, какую то информацию для определенного города.
Вот собственно и все что я хотел написать про возможность отображения города используя Яндекс API, ниже вы можете посмотреть пример данного варианта.
Посмотреть пример
Определение страны и города посетителя по IP.
Следующим шагом у нас будет другой альтернативный способ геолокации на сайте, который работает очень быстро, и по параметрам точность определения города возможно даже лучше чем определение города Яндексом, ну и плюс никаких ограничений и блокировок. И так, в данном примере мы будем использовать библиотеку Sypex Geo и штатные возможности php.
Описывать насколько библиотека Sypex Geo крутая, быстрая и многофункциональная я не буду, про это вы можете найти информацию в интернете и самостоятельно, скажу просто - Sypex Geo это быстрое определение города по IP посетителя.
Ну что же, давайте определим IP, страну, город пользователя на PHP и Sypex Geo и рассмотрим инструкцию подключения. Ниже под статьей можно будет скачать уже готовый скрипт определения города пользователя на сайте, здесь же мы рассмотрим как все это подключить.
Пример работы можно посмотреть ниже:
Ваш регион: Вашингтон
Вы сейчас находитесь в г. Сиэтл
Ваш IP Адресс: 3.139.81.254
Код вашей страны: US
Номер вашей страны: 225
И так, качаем скрипт Sypex Geo к себе на компьютер, и распаковываем скачанный архив, полученную папку SxGeo загружаем в корень вашего сайта, после есть два варианта подключения:
Первый самый простой, в нужном вам месте вывода добавляем следующий код:
1 |
<?php include "SxGeo/index.php"; ?> |
Таким образом мы просто вывели на сайте отображение информации из файла SxGeo/index.php , в котором при желании можете изменить информацию таким образом как нужно вам.
Второй способ тоже не сложный, так же как и в первом способе вам нужно в место где вы хотите отобразить город посетителя и другую информацию добавить следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php $ip = $_SERVER['REMOTE_ADDR']; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeo/SxGeoCity.dat'); $city = $SxGeo->getCity($ip); // возвращает с краткой информацией, без названия региона и временной зоны $countryid = $SxGeo->getCountryId($ip); //возвращает номер страны $country = $SxGeo->getCountry($ip); // возвращает двухзначный ISO-код страны $region = $SxGeo->getCityFull($ip); // возвращает Область // Отображаемые данные начало echo "<b>Ваша страна:</b> "; echo ($region['country']['name_ru']); // Страна echo "<br>"; echo "<b>Ваш регион:</b> "; echo ($region['region']['name_ru']); // Область echo "<br>"; echo "<b>Вы сейчас находитесь в"; echo " "; echo "г.</b>"; echo " "; echo ($city['city']['name_ru']); // Город echo "<br>"; echo "<b>Ваш IP Адресс:</b> "; echo $_SERVER['REMOTE_ADDR']; // IP адресс echo "<br>"; echo "<b>Код вашей страны:</b> "; echo ($country); // Код страны echo "<br>"; echo "<b>Номер вашей страны:</b> "; echo ($countryid); // Номер страны echo "<br>"; // Отображаемые данные конец ?> |
И в нем внести изменения и требуемую информацию вывода. Так же не забывайте про пути в третьей и четвертой строке, они должны соответствовать вашему сайту. Вот собственно и все что нам нужно было сделать чтоб на сайте показывались точные геоданные посетителя.
Как подключить данный скрипт геолокации в интернет магазине Opencart?
Если вы захотите подключить данный скрипт в интернет магазине на смс opencart, то в данном случае подключение кардинально меняются, так как если вы подключите по инструкции описанной выше, получите ошибку и ничего не будет работать. Поэтому я и хочу сразу же здесь описать метод подключения определения города посетителя в интернет магазине opencart.
Первым делом для того чтоб добавить в интернет магазине скрипт определения города пользователя, вам опять же нужно скачать сам скрипт ниже, распаковать его и загрузить в корень вашего сайта папку SxGeo.
Следующем шагом нам нужно открыть файл index.php который находится в корне вашего интернет магазина и найти строку:
1 |
$registry->set('request', $request); |
После которой добавляем следующее:
1 2 3 4 |
// new SxGeo require_once(DIR_SYSTEM . 'library/SxGeo.php'); $SxGeo = new SxGeo('SxGeo/SxGeoCity.dat'); $registry->set('SxGeo', $SxGeo); |
Обратите внимание! В случае если у вас установлен модуль Geo IP в магазине, но вы все равно хотите подключить данный скрипт, (ситуации разные бывают) то вам нужно добавлять немного другой код а именно:
1 2 3 4 |
// new SxGeo //require_once(DIR_SYSTEM . 'library/SxGeo.php'); $SxGeo = new SxGeo('SxGeo/SxGeoCity.dat'); $registry->set('SxGeo', $SxGeo); |
То есть все тоже самое, только комментируем первую строку, так как в противном случае вы получите ошибку вывода, конфликт классов, которые уже присутствуют в модуле Geo IP.
Так же, обратите внимание на пути в первой и второй строке, если вы копируете папку не в корень а в другое место, пути должны соответствовать вашей структуре магазина.
После открываем файл index.php который находится в папке SxGeo и все его содержимое меняем на такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php $ip = $this->request->server['REMOTE_ADDR']; $city = $this->SxGeo->getCity($ip); // возвращает с краткой информацией, без названия региона и временной зоны $countryid = $this->SxGeo->getCountryId($ip); //возвращает номер страны $country = $this->SxGeo->getCountry($ip); // возвращает двухзначный ISO-код страны $region = $this->SxGeo->getCityFull($ip); // возвращает Область // Отображаемые данные начало echo "Моя страна: "; echo ($region['country']['name_ru']); // Страна echo "<br>"; echo "Мой регион: "; echo ($region['region']['name_ru']); // Область echo "<br>"; echo "Я живу в"; echo " "; echo "г."; echo " "; echo ($city['city']['name_ru']); // Город echo "<br>"; echo "Мой IP Адресс: "; echo $this->request->server['REMOTE_ADDR']; // IP адресс echo "<br>"; // Отображаемые данные конец ?> |
И самый последний пункт это вывод города на страницах нашего магазина, для этого в любое место вашего шаблона, где вы хотите отобразить информацию добавляем следующее:
1 |
<?php include 'SxGeo/index.php'; ?> |
Вот собственно и все, теперь на страницах вашего интернет магазина, будет красоваться информация о местоположении вашего покупателя.
СКАЧАТЬ ГОТОВЫЙ СКРИПТ SYPEX GEO ВЫ МОЖЕТЕ НИЖЕ
Местонахождения пользователя на карте.
Ну и напоследок небольшой бонус от Google Map, местоположение пользователя на Google карте. Простой скрипт отображения карты с отметкой текущего положения посетителя, ниже можно глянуть пример, возможно кому то пригодится.
Для того чтоб добавить на свой сайт Google карту с определением города посетителя вставьте в любое место на вашем сайте следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<section id="wrapper"> <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=[google_key]"> </script> <article> </article> <script> function success(position) { var mapcanvas = document.createElement('div'); mapcanvas.id = 'mapcontainer'; mapcanvas.style.height = '400px'; mapcanvas.style.width = '600px'; document.querySelector('article').appendChild(mapcanvas); var coords = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); var options = { zoom: 15, center: coords, mapTypeControl: false, navigationControlOptions: { style: google.maps.NavigationControlStyle.SMALL }, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("mapcontainer"), options); var marker = new google.maps.Marker({ position: coords, map: map, title:"Вы здесь!" }); } if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(success); } else { error('Геолокация не поддерживается'); } </script> </section> |
Где [google_key] замените на свой ключ который вы должны получить от Google для своего сайта. Вот собственно и все, пользуйтесь на здоровья, будут вопросы или рекомендации пишите в комментариях. Удачи Вам!
18 комментариев
Здоровья Вам! Сколько моих нервов Вы сберегли этими строчками! Спасибо!
Рад что статья была Вам полезной.
Такой вопрос, а как реализовать вывод города в div с просить ваш ли это город ?
Ну такое в двух словах не опишешь, возможно если будет свободное время допишу данную статью… или напишу отдельную…
Огромный респект за статью
как название города сделать в echo ($city[‘city’][‘name_ru’]); // Город
Не совсем конечно понял вопроса но думаю просто поменять слово «г.«; на город.
Здравствуйте. Почему через код
window.onload = function () {
jQuery(«#user-city»).text(ymaps.geolocation.city);
jQuery(«#user-region»).text(ymaps.geolocation.region);
jQuery(«#user-country»).text(ymaps.geolocation.country);
}
Местоположение на странице выводит только один раз. В блоке рядом хочу отобразить тоже но не выводит. Как сделать чтобы добавить в несколько блоков?
Ну наверное потому что вы конфликт создаете…
Попробуйте изменить во втором блоке на user-city2, user-region2, user-country2 как то так…
Спасибо, шикарная статья! Все по делу и понятно …
По определению IP сейчас уже много решений для определения. появились такие сервисы, позволяющие узнавать не только IP, но и телефонные номера всех посетителей сайта. используют в маркетинге для обзвонов. говорят, что легально — патенты, резрешения, все дела. как они это делают?
«Так же не забывайте про пути в третьей и четвертой строке, они должны соответствовать вашему сайту» Где и как? Не понял
Дак вроде же бы понятно написано, путь к файлу от корня вашего сайта.
Каждый устанавливает в папки на свое усмотрение, собственно могут пути отличатся…. Надеюсь так понятно будет… :):):)
Доброго дня.
В начале статьи Вы написали, что можно переадресовать на поддомен, но прочитав до конца не увидел никаких инфо как это реализовать.
Напишите по возможности пожалуйста ответ в комментариях.
Спасибо.
Самый простой это использования яндекс
Для определения скриптом яндекс:
Если же использовать скрипт и базу Sypex Geo то тут нужно немного разбираться в PHP, здесь все индивидуально для каждого.
К примеру можете за основу взять код ниже:
Как то так если вкратце…
Вот готовый рабочий полный вариант для яндекса:
Скажите пожалуйста из-за чего может не работать в яндексе первый срипт,который вы написали.Он определяет только страну,все остальные строки пустые .За ранее благодарю за ответ!
Сложно ответить не видя сайта…
Причин много, от неправильной установки, до конфликта скриптов…
Это для какого Опенкарта написано? А для версии Opencart 2.3 не подскажите как поставить этот скрипт.
Статья писалась еще для Opencart 1.5
Для Opencart 2.3 изменения есть но не большие, к сожалению писать для каждой ветки детальную инструкцию по каждой из статьей у меня нет времени.
Но возможно заказать платную доработку.