Для одного проекта потребовалось определение из какого города/региона пользователь. Вот написал пакет Geoip. Просто качаете пакет из нашего репозитория, заливаете его на сайт в папку core/packages/ и устанавливаете локально. Использование: // Подключаем пакет $modx->addPackage('Geoip', $modx->getOption('core_path').'components/geoip/model/');
// Подгружаем основной класс (он содержит нужные нам статические методы) $modx->loadClass('Geoip');
// Быстрый метод получить информацию о расположении // Возвращает объект Geoip с полной информацией, // включая город, регион, область, широта/долгота и т.п. $location = Geoip::findByIp($modx);
// Или формируем xPDOCriteria для более гибких запросов $query = Geoip::newQuery($modx); Пока что база только России и Украины, но в дальнейшем можно развить ее. Основным плюсом использования именно локальной базы, а не он-лайн сервисов, можно назвать производительность. Если вы используете он-лайн сервисы, и при заходе пользователя удаленный сервис затормозит, пока мы будем пытаться получить ответ, страница для пользователя так же будет висеть. А здесь все мгновенно проходит.
Дополнительная информация по теме: tokarchuk.ru/2011/05/geolocation-geoip-in-php/ php.net/manual/ru/ref.geoip.php www.phpandstuff.com/articles/geoip-country-lookup-with-php
скачал, установил... [2013-05-07 13:26:37] (ERROR @ /index.php) Invalid path specified for package: Geoip; using default xpdo model path: /paas/c0100/www/core/xpdo/om/ [2013-05-07 13:26:37] (ERROR @ /index.php) Could not load class: Geoip from mysql.geoip. что за беда?
Да, это я в примере не прописал путь к пакету. Вместо $modx->addPackage('Geoip'); надо $modx->addPackage('Geoip', $modx->getOption('core_path').'components/geoip/model/');
был бы вам признателен за подробный пример… единственное что мне удалось так это получить массив ) Array ( [0] => Array ( [Geoip_id] => 11206 [Geoip_ip_start] => -734667007 [Geoip_ip_end] => -734666752 [Geoip_city_index] => 2097 [Geoip_country_index] => 1 )
)
Так вот это и есть данные, то есть пользователь успешно идентифицирован. Теперь просто добавляйте сюда связанные таблицы по айдишникам. К примеру, Geoip_country_index — это индекс страны. В данном случае 1. Смотрите в таблице стран. А Geoip_city_index в таблице городов. Кстати, судя по всему вы использовали запрос через $query. Но $location = Geoip::findByIp($modx); возвращает уже более подробную информацию. Посмотрите код в geoip.class.php, там же все расписано. К примеру этот метод: public static function findByIp(xPDO $xpdo, $ip = 'auto'){ if(!$c = self::newQuery($xpdo, $ip)){ return false; } $c->leftJoin('GeoipLocation', 'Location'); $c->leftJoin('GeoipCountry', 'Country'); $c->select(array( "Country.", "Location.", "Geoip.*", "ip_end-ip_start as distance", )); $c->sortby('distance'); $c->limit(1); return $xpdo->getObject("Geoip", $c); } Вот вам подробнейший пример связанных запросов.
Почему нет доступа к закачке пакета?
Потому что скачивания доступны полноправным членам клуба.
А вот это не считается? http://community.modx-cms.ru/profile/Neolot/
Нет. modx-cms.ru — это не modxclub.ru Полноправными членами становятся по индивидуальному отбору.
Хорошо, но ведь не так много разработчиков на MODX, чтобы регаться на очередном сообществе, которое захотелось создать его владельцу, да и еще набирать там карму. И тем более непонятна идея закрывать информацию, ведь это только мешает популяризации движка. Я уважаю тебя, Николай, за толковые публикации, ты, без лести, наверное больше других пишешь о MODX. Я лично около 4 лет работаю с MODX, был почти с самого начала в сообществе modx-cms.ru, поэтому не понаслышке знаю ситуацию и могу судить.
Я лично около 4 лет работаю с MODX, был почти с самого начала в сообществе modx-cms.ru Да, регистрация действительно очень давняя… Правда активности не было на modx-cms.ru за последние полгода, но это ничего, я тоже долгое время ничего не писал. Дал доступ. Переавторизуйся. Карму здесь набивать не нужно. За один проект можно понять ху из ху. И тем более непонятна идея закрывать информацию, ведь это только мешает популяризации движка. Популяризация — не главная цель. Осмотрись по закрытым топикам — все станет ясно.
Ок, спасибо
Пожалуйста
У меня такая потребность возникла, добавить в эту базу Казахстан, это возможно?) Даже без областей) Я пытался найти, или разобраться в базе GeoIP, но что то никак) Откуда ты брал базу? Можешь подсказать в каком направлении нужно капнуть?)
Я откуда-то взял готовую базу. Но суть в том, что GeoIP — это средства, доступные самому php в системе (конечно же, если поддуржка установлена). То есть это в принципе публичный инструмент. На уровне php можно получить информацию о любом ip. Копай лучше в этом направлении, и не будешь ограничен.
а кто вам мешает взять и добавить вручную? ?
Спасибо! Нашел БД откуда скорее всего ты брал ipgeobase.ru/cgi-bin/Archive.cgi тут есть ip всех стран) Отсюда и буду плясать.
Просто не знаю диапазонов адресов)) но я добавлю в ручную) базу надо было найти)
Вот и славно.
Тоже хочу стать членом клуба, как это сделать?
Проявить себя как-то. Вы уже пол-года здесь, но мы о вас ничего не знаем. Ни комментов, ни топиков-вопросов, ничего.
Привет Философ. Файла нет: Извините, страница не найдена
Привет. Есть, просто доступ к репозиторию теперь платный. Формулировку в топике поменял. Вывод ошибок тоже позже поправлю.