Otto Posted May 27, 2017 Report Share Posted May 27, 2017 Вот что то похожее... http://www.ipinfodb.com/ip_location_api_json.php Если кто готов помочь с кешированием $$$ прошу в ЛС Quote Link to post Share on other sites
mar Posted June 9, 2017 Report Share Posted June 9, 2017 (edited) Вот что то похожее... http://www.ipinfodb.com/ip_location_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)); } Edited June 9, 2017 by mar Quote Link to post Share on other sites
Mila Posted August 24, 2017 Report Share Posted August 24, 2017 Спасибо! А как бы ещё все это дело кешировать? А то доходит до 30 просмотров на посетителя.куда его поместить?)поясни плиз Quote Link to post Share on other sites
Chudo Posted September 14, 2017 Report Share Posted September 14, 2017 (edited) Друзья, привет! Помогите пожалуйста организовать работу скрипта таким образом, что бы заходя на сайт 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> Edited September 14, 2017 by Chudo Quote Link to post Share on other sites
loxter Posted September 14, 2017 Report Share Posted September 14, 2017 reg=ymaps.geolocation.region if(reg=='Курская область'){ location.href='//х2.site.ru/' } if(reg=='Брянская область'){ location.href='//х3.site.ru/' } Quote Link to post Share on other sites
Chudo Posted September 14, 2017 Report Share Posted September 14, 2017 reg=ymaps.geolocation.regionif(reg=='Курская область'){location.href='//х2.site.ru/'}if(reg=='Брянская область'){location.href='//х3.site.ru/'} Спасибо большое, работает) Quote Link to post Share on other sites
Dmitry86 Posted December 2, 2017 Report Share Posted December 2, 2017 потому что айди должен быть уникальным у всех объектов. соответсвенно вы ставите три ссылки с одним айди и вам вставляет только на первую. для множества используйте классы. <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 == 'название города есть в массиве городов') Заране благодарю за помощь! Quote Link to post Share on other sites
mishanya Posted December 2, 2017 Report Share Posted December 2, 2017 Добрый день! Подскажите, пожалуйста, если необходимо, чтобы информация показывалась в зависимости не от одного города, а например, если город посетителя есть в списке городов (в массиве), то есть if(ymaps.geolocation.city == 'название города есть в массиве городов') Заране благодарю за помощь! var cities = ['Москва', 'Новоибирск', 'Казань']; if(cities.indexOf(ymaps.geolocation.city)>-1) { alert('Вы в нужном городе'); } Quote Link to post Share on other sites
Dmitry86 Posted December 2, 2017 Report Share Posted December 2, 2017 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> Quote Link to post Share on other sites
jonny008 Posted January 25, 2018 Report Share Posted January 25, 2018 Здравствуйте. Пытаюсь назначить город в переменную smarty. <script type="text/javascript"> window.onload = function () { var gorod; gorod = ymaps.geolocation.city; {assign var=user_region value = 'gorod'}; } </script> {$user_region} Вообще никак не работает. Вопрос конечно глупый, но с javascript вообще никак. Подскажите пожалуйста, что не так. Quote Link to post Share on other sites
Kosjak76 Posted January 25, 2018 Report Share Posted January 25, 2018 Все не так...Смарти работает на сервере при генерации страницы, а джаваскрипт - в браузере юзера. Quote Link to post Share on other sites
jonny008 Posted June 25, 2018 Report Share Posted June 25, 2018 Все не так...Смарти работает на сервере при генерации страницы, а джаваскрипт - в браузере юзера.Получилось вот так вывести в переменную: $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = @$_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client; elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward; else $ip = $remote; echo $ip; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $data = $SxGeo->get($ip); $city = $data['city']['name_ru']; $this->design->assign('city', $city); Quote Link to post Share on other sites
doni031 Posted August 25, 2018 Report Share Posted August 25, 2018 А можно сделать так чтобы когда пользователь первый раз заходит на сайт выбирает город из списка и его город как-то запоминался? Quote Link to post Share on other sites
phukortsin Posted August 25, 2018 Report Share Posted August 25, 2018 Конечно, можно.Например, по аналогии с тем, как стандартно выбираются валюты... Quote Link to post Share on other sites
jonny008 Posted December 9, 2018 Report Share Posted December 9, 2018 Немного другое решение для вывода переменной в шаблон. Скачиваем SxGeo.php и SxGeoCity.dat с сайта http://sypexgeo.net/ru/download/ В файле IndexView.php после строки: $this->design->assign('module', $module); Пишем: $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = @$_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client; elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward; else $ip = $remote; //echo $ip; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $data = $SxGeo->get($ip); $city = $data['city']['name_ru']; $this->design->assign('city', $city); В шаблоне выводим переменной {$city} Определяет город с точностью 99%. Quote Link to post Share on other sites
Dmitry86 Posted November 2, 2019 Report Share Posted November 2, 2019 Немного другое решение для вывода переменной в шаблон. Скачиваем SxGeo.php и SxGeoCity.dat с сайта http://sypexgeo.net/ru/download/ В файле IndexView.php после строки: $this->design->assign('module', $module); Пишем: $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = @$_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client; elseif(filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward; else $ip = $remote; //echo $ip; include("SxGeo.php"); $SxGeo = new SxGeo('SxGeoCity.dat'); $data = $SxGeo->get($ip); $city = $data['city']['name_ru']; $this->design->assign('city', $city); В шаблоне выводим переменной {$city} Определяет город с точностью 99%. Спасибо за отличное решение! Только не получается вывести {$city} в шаблон.. Пытаюсь вывести в product.tpl В IndexView.php сделал как указано. После: $this->design->assign('module', $module); вставил: // Определение города посетителя по IP $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = @$_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client; elseif (filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward; else $ip = $remote; include("SxGeo/SxGeo.php"); $SxGeo = new SxGeo('SxGeo/SxGeoCity.dat'); $data = $SxGeo->get($ip); $city = $data['city']['name_ru']; // Передаем название города в шаблон $this->design->assign('city', $city); И вместо города в шаблоне пусто.. Создал в корне сайта тестовый файлик: <?PHP // Определение города посетителя по IP $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = @$_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client; elseif (filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward; else $ip = $remote; echo $ip; include("SxGeo/SxGeo.php"); $SxGeo = new SxGeo('SxGeo/SxGeoCity.dat'); $data = $SxGeo->get($ip); $city = $data['city']['name_ru']; echo $city; Он отображает ip и город. Не пойму, что не правильно сделал.. Подскажите, пожалуйста! Quote Link to post Share on other sites
Dmitry86 Posted November 2, 2019 Report Share Posted November 2, 2019 (edited) Спасибо за отличное решение! Только не получается вывести {$city} в шаблон.. Пытаюсь вывести в product.tpl В IndexView.php сделал как указано. После: $this->design->assign('module', $module);вставил: // Определение города посетителя по IP $client = @$_SERVER['HTTP_CLIENT_IP']; $forward = @$_SERVER['HTTP_X_FORWARDED_FOR']; $remote = @$_SERVER['REMOTE_ADDR']; if(filter_var($client, FILTER_VALIDATE_IP)) $ip = $client; elseif (filter_var($forward, FILTER_VALIDATE_IP)) $ip = $forward; else $ip = $remote; include("SxGeo/SxGeo.php"); $SxGeo = new SxGeo('SxGeo/SxGeoCity.dat'); $data = $SxGeo->get($ip); $city = $data['city']['name_ru']; // Передаем название города в шаблон $this->design->assign('city', $city);И вместо города в шаблоне пусто.. Создал в корне сайта тестовый файлик: get($ip); $city = $data['city']['name_ru']; echo $city;Он отображает ip и город. Не пойму, что не правильно сделал.. Подскажите, пожалуйста! Разобрался. Сделал немного иначе. в файле View.php после self::$view_instance = $this;вставил if (!empty($_SERVER['HTTP_X_REAL_IP'])) { $client_ip = $_SERVER['HTTP_X_REAL_IP']; } elseif (!empty($_SERVER['HTTP_CLIENT_IP'])) { $client_ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $client_ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $client_ip = $_SERVER['REMOTE_ADDR']; } if(filter_var($client_ip, FILTER_VALIDATE_IP)) $this->current_ip = $client_ip; include("SxGeo/SxGeo.php"); $SxGeo = new SxGeo('SxGeo/SxGeoCity.dat'); $data_ip = $SxGeo->get($this->current_ip); $user_city = $data_ip['city']['name_ru']; //var_dump($user_city); // Записать город в куки //setCookie("user_city", $user_city, time()+86400,'/'); // Передаем название города в шаблон $this->design->assign('user_city', $user_city);Теперь в любом шаблоне работает переменная {$user_city} Если надо записывать город пользователя в куки, то раскомментируйте строчку: //setCookie("user_city", $user_city, time()+86400,'/');и можете поменять время, на которое они устанавливаются. 86400 - это сутки. Чтобы потом в шаблоне вызвать город из куки, то используйте {$smarty.cookies.user_city|urldecode} И ещё обратите внимание, что у меня сервер настроен так, что $_SERVER['REMOTE_ADDR']; отдает адрес самого сервака, поэтому я поставил его в условии последним, чтобы ip не был пустой, если вдруг он не определился у пользователя. Здесь можете делать как вам нужнее. Вроде всё. Edited November 2, 2019 by Dmitry86 Quote Link to post Share on other sites
Morfeus Posted January 28, 2020 Report Share Posted January 28, 2020 Добрый день, подскажите чайнику начинающему, вставил код в шаблон файл index.tpl, ничего не выводится. Заключал в {literal} Quote Link to post Share on other sites
Kasha Posted February 19, 2020 Report Share Posted February 19, 2020 Добрый день, подскажите чайнику начинающему, вставил код в шаблон файл index.tpl, ничего не выводится. Заключал в {literal}ссылку пришлите, надо проверять, ошибок может быть уйма в таком подключении..Самое первое что приходит на ум - двойное подключение jquery... Quote Link to post Share on other sites
maxwelhoue Posted January 27, 2021 Report Share Posted January 27, 2021 В 02.11.2019 в 23:49, Dmitry86 сказал: Скачиваем SxGeo.php и SxGeoCity.dat с сайта http://sypexgeo.net/ru/download На основе Sypexgeo на сайте реализовано переадресация на поддомены (регионы РФ). Кто может помочь с реализацией вывода модального окна с запросом - Правильно ли определен Ваш город (выберете из списка, в случае не верного определения). Интересует качественная ПЛАТНАЯ доработка. Quote Link to post Share on other sites
a13x Posted January 27, 2021 Report Share Posted January 27, 2021 А в чём доработка заключается? Просто выводить модальное окно при первой загрузке страницы и чтобы человек сделал выбор сохранив его? Quote Link to post Share on other sites
maxwelhoue Posted January 27, 2021 Report Share Posted January 27, 2021 51 минуту назад, a13x сказал: А в чём доработка заключается? Просто выводить модальное окно при первой загрузке страницы и чтобы человек сделал выбор сохранив его? Да, все верно. Сделав выбор он будет переадресован на соответсвующий поддомен сайта. Quote Link to post Share on other sites
NiHaTiM Posted May 10, 2021 Report Share Posted May 10, 2021 Подскажите сейчас эта функция работает? Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.