Dimon789 Опубликовано 25 октября, 2014 Жалоба Поделиться Опубликовано 25 октября, 2014 Подскажите что не так делаю, вот код определения города, вставляю его в файле CartView.php перед ////////////////////////////////////////// // Основная функция ////////////////////////////////////////// function get_city() { $ip = false; $city = false; if (isset($_COOKIE['ip'])) $ip = $_COOKIE['ip']; // получаем ip из cookie, если задано if (isset($_COOKIE['city'])) $city = get_cookie('city'); // получаем город из cookie, если задано // если в cookie задан город завершаем функцию возвратив этот город if ($city && !empty($city)) return $city; // если нашли ip в cookie то не проверяем ip посетителя if (!$ip || empty($ip)) { if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] != '127.0.0.1' && preg_match('#^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$#', $_SERVER['HTTP_X_FORWARDED_FOR'])) { $ipa[] = $_SERVER['HTTP_X_FORWARDED_FOR']; } if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP'] != '127.0.0.1' && preg_match('#^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$#', $_SERVER['HTTP_CLIENT_IP'])) { $ipa[] = $_SERVER['HTTP_CLIENT_IP']; } if (isset($_SERVER['REMOTE_ADDR']) && preg_match('#^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$#', $_SERVER['REMOTE_ADDR'])) { $ipa[] = $_SERVER['REMOTE_ADDR']; } $ip = $ipa[0]; } $url = 'http://194.85.91.253:8090/geo/geo.html'; $cl = curl_init(); $query = '<ipquery><fields><all/></fields><ip-list><ip>' . $ip . '</ip></ip-list></ipquery>'; curl_setopt($cl, CURLOPT_URL, $url); curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($cl, CURLOPT_TIMEOUT, 1); curl_setopt($cl, CURLOPT_POST, 1); curl_setopt($cl, CURLOPT_POSTFIELDS, $query); $result = curl_exec($cl); curl_close($cl); preg_match("|<city>(.*?)</city>|", $result, $city); if (isset($city[1])) $city = $city[1]; else $city = false; return $city; $city = trim(get_city()); $this->design->assign('city', $city); } в шаблоне cart.tpl добавляю {$city}По идее должен определять город по IP, но выводит город Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 26 октября, 2014 Жалоба Поделиться Опубликовано 26 октября, 2014 Значение {$city} не определено. Видимо, причина в том, что $this->design->assign('city', $city); не срабатывает, так как стоит после return $city; Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 26 октября, 2014 Жалоба Поделиться Опубликовано 26 октября, 2014 А обращение к функции внутри самой функции - это разве правильно? $city = trim(get_city()); Тут скорее закрывающая скобка должна стоять после return $city; Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 26 октября, 2014 Жалоба Поделиться Опубликовано 26 октября, 2014 Не срабатывает функция. IP определяет, а город не возвращает. Может запрос не срабатывает. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 26 октября, 2014 Жалоба Поделиться Опубликовано 26 октября, 2014 А обращение к функции внутри самой функции - это разве правильно?http://www.php.su/articles/?cat=examples&page=019 Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 26 октября, 2014 Жалоба Поделиться Опубликовано 26 октября, 2014 http://www.php.su/ar...amples&page=019 Спасибо. У меня как раз этот сайт открыт, но до этой статьи еще не добрался. Теперь понятно, хотя и странно.Но запрос всё равно не срабатывает. Цитата Ссылка на сообщение Поделиться на другие сайты
insider Опубликовано 26 октября, 2014 Жалоба Поделиться Опубликовано 26 октября, 2014 Небольшой мануал по геолокации через Yandex API Цитата Ссылка на сообщение Поделиться на другие сайты
Dimon789 Опубликовано 26 октября, 2014 Автор Жалоба Поделиться Опубликовано 26 октября, 2014 Небольшой мануал по геолокации через Yandex APIдумаю подходящий вариант, как раз искал ) Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.