Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save TrywaR/2182e0b3427a9a9cf1a1555972a81f8d to your computer and use it in GitHub Desktop.
Save TrywaR/2182e0b3427a9a9cf1a1555972a81f8d to your computer and use it in GitHub Desktop.
Вычесляем юзверя по ip и в зависимости от города показываем контактные данные (телефон, мыло и тд)

Js для вывода списка городов, и кликов всяких для смены города в ручную

// swithGeolocation
  // - Показ городов
  $.post('/', {'SHOW_CITIES': 'ok'}, function(data){
    $('#SwithGeolocationBlock').append(data)
  })
  // - Выбор другого города
  $(document).on('click', '.swithGeolocation:not(._active_)', function(){
    $.post('/', {'USER_CITY': $(this).data().city})
    location.reload()
  })
  // - Показ формы выбора городов
  $(document).on('click', '#SwithGeolocationBlock_show, #SwithGeolocationBlock_close', function(){
    $('#SwithGeolocationBlock').toggleClass('_show_')
  })
// swithGeolocation x

HTML для вывода формы

<div class="SwithGeolocationBlock" id="SwithGeolocationBlock">
  <div class="SwithGeolocationBlock_header">
   Выбрать город:
  <div id="SwithGeolocationBlock_close">x</div>
 </div>
</div>

HTML для вывода города

<span id="SwithGeolocationBlock_show">
 [!geolocation? &need=`name`!]
</span>
<?php
// Создаём снипет, например geolocation
// тут его содержимое, а выводим его так
// [!geolocation? &need=`phone` &html=`1`!]
// $need - Запрос на вывод
if (!$need)
$need = 'phone'; // По умолчанию выводим телефон
// Нужные параметры
$cityDefault = 'Санкт-Петербург'; # город по умолчанию
$arrParam = array(
'Санкт-Петербург' => array(
'phone' => '+7(777) 777-77-77',
'address' => 'ул. дом. дурдом.',
),
'Москва' => array(
'phone' => '+7(777) 777-77-78',
'address' => 'ул. дом. дурдом. к2',
)
);
// Тащим город пользователя из POST
if (isset($_POST['USER_CITY']))
$_SESSION['USER_CITY'] = $_POST['USER_CITY'];
// Если еще не вытаскивали город пользователя, тащим
if (empty($_SESSION['USER_CITY']) && empty($_POST['USER_CITY'])) {
$ip = $_SERVER['REMOTE_ADDR'];
$url = 'http://ipgeobase.ru:7020/geo?ip='.$ip;
$xmlstr = file_get_contents($url);
$xml = new SimpleXMLElement($xmlstr);
$sUserCity = $xml->ip[0]->city;
// Если отвалился ipgeobase (500) пробуем другой
if (empty($xmlstr)) {
$request = file_get_contents("http://api.sypexgeo.net/json/".$ip);
$array = json_decode($request);
$sUserCity = $array->city->name_ru;
}
// Город по умолчанию или город пользователя
if(empty($sUserCity))
$_SESSION['USER_CITY'] = $cityDefault;
else
$_SESSION['USER_CITY'] = iconv('utf-8', 'utf-8', $sUserCity);
}
// Вывод списка городов
if (isset($_POST['SHOW_CITIES'])) {
echo '<ul>';
foreach ($arrParam as $city => $param)
if ($city == $_SESSION['USER_CITY'])
echo '<li class="swithGeolocation _active_" data-city="'.$city.'">'.$city.'</li>';
else
echo '<li class="swithGeolocation" data-city="'.$city.'">'.$city.'</li>';
echo '</ul>';
die();
}
// Ищем подходящий массив с параметрами
if (isset($arrParam[$_SESSION['USER_CITY']][$need]))
$result = $arrParam[$_SESSION['USER_CITY']][$need];
else
$result = $arrParam[$cityDefault][$need];
// Оформляем вывод при необходимости
if (isset($html)) {
if ($need === 'phone') {
$sPhoneClean = str_replace("+", "", $result);
$sPhoneClean = str_replace("(", "", $sPhoneClean);
$sPhoneClean = str_replace(")", "", $sPhoneClean);
$sPhoneClean = str_replace("-", "", $sPhoneClean);
$sPhoneClean = str_replace(" ", "", $sPhoneClean);
$result = '
<a href="tel:'.$sPhoneClean.'">
'.$result.'
</a>
';
}
}
// Выводим
return $result;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment