Вывод телефонов регионального представительства по IP-адресу посетителя. Скрипт на основе API Яндекс карт

Периодически возникает задача определения на сайте города по IP-адресу и вывода регионозависимой информации, например телефонов представительства.

Одним из вариантов решения является использование geoip-расширения PHP, особенно если мписок представительств расширяется, но чаще всего их список меняется редко, а решение нужно предоставить минимально-работающее.

Представленное решение чисто клиентское и работает на javascript, используя функционал API Яндекс карт. Оно будет работать не только для посетителей из указанных городов, но и из указанных регионов. Например, для пользователя из г.Кинель Самарской области, будет отображаться телефон представительства в г.Самара.

Шаг 1. HTML-код на странице

Создаём на странице html-код в месте, где должны выводиться телефоны (чаще всего в шапке сайта)

<!-- Города и телефоны правятся в файле /js/cities.js -->
<script src="http://api-maps.yandex.ru/1.1/index.xml" type="text/javascript"></script>
<script src="/js/cities.js" type="text/javascript"></script>
<div id="city-detect" class="city-detect">Общий телефон</div>
<div id="region-detect" class="region-detect" style="display: none;"><!-- Определённый регион(для теста) --></div>
<span id="phone-detect" class="phone-detect">************</span>

Данный код должен содержать город и телефон главного представительства. Он будет отображаться, если javascript не сработвет.

Шаг 2. Создаём файл /js/cities.js

И прописываем в нём телефоны региональных представительств. Очень важно регион указывать именно таким, каким его знает API Яндекс карт. Как правило это название совпадает с официальным.

var maps = YMaps;
 
phones = Array();
phones.push({
    region:"Московская область",
    city:"Москва",
    number:"***"
});
phones.push({
    region:"Самарская область",
    city:"Самара",
    number:"***"
});
phones.push({
    region:"Ленинградская область",
    city:"Санкт-петербург",
    number:"***"
});
phones.push({
    region:"Белгородская область",
    city:"Белгород",
    number:"***"
});
phones.push({
    region:"Белгородская область",
    city:"Белгород",
    number:"***"
});
phones.push({
    region:"Краснодарский край",
    city:"Краснодар",
    number:"***"
});
phones.push({
    region:"Ульяновск",
    city:"Ульяновская область",
    number:"***"
});
phones.push({
    region:"Ульяновск",
    city:"Ульяновская область",
    number:"***"
});
phones.push({
    region:"Уфа",
    city:"Республика Башкортостан",
    number:"***"
});
phones.push({
    region:"Челябинск",
    city:"Челябинская область",
    number:"***"
});
phones.push({
    region:"Екатеринбург",
    city:"Свердловская область",
    number:"***"
});
phones.push({
    region:"Екатеринбург",
    city:"Свердловская область",
    number:"***"
});
 
 
 
maps.jQuery(function(){
    var location = maps.location;
    var region = location.region;
    var city = location.city;
 
    set_head_phone(phones[0].city,phones[0].region,phones[0].number)
    for(i in phones)
        if(phones[i].region==region)
            set_head_phone(phones[i].city,phones[i].region,phones[i].number);
    });
 
function set_head_phone(city,region,number){
    maps.jQuery("#city-detect").html("Телефон в г."+city);
    maps.jQuery("#region-detect").html(region);
    maps.jQuery("#phone-detect").html(number);
}

Добавить комментарий