Сниппет геолокации для MODx на базе Sypex Geo

Задача определить регион пользователя и при необходимости модифицировать отображаемый контент страницы с учетом этих данных встречается довольно часто, об одном абсолютно бесплатном продукте и его интеграции в MODx я и хочу рассказать чуть ниже.

Имя этому продукту Sypex Geo представляет он собой php класс с бинарным файлом, в котором и содержится информация о ip адресах и их регионах. Собственно перейдем к самому сниппету, для начала нам требуется определить и записать в переменную ip адрес пользователя:

$ip = $_SERVER["REMOTE_ADDR"];

Далее подключаем класс SxGeo.php который мы бережно залили в папку sxgeo в корне нашего сайта:

require_once($modx->config['base_path']."sxgeo/SxGeo.php");

Создаем объект класса с бинарной базой адресов:

$SxGeo = new SxGeo($modx->config['base_path'].'sxgeo/SxGeo_IGB.dat', SXGEO_BATCH | SXGEO_MEMORY);

Определяем геопозицию:

$region = $SxGeo->getCityFull($ip);

В результате получаем массив $region в кодировке CP1251 (так как наша база имеет эту кодировку) со следующим содержимым:

Array ( [regid] => 1897 [cc] => 185 [fips] => [lat] => 58.596081 [lon] => 49.662659 [country] => RU [city] => Киров [region_name] => Кировская область [timezone] => )

Так как кодировка нашего сайта UTF-8, то мы перекодируем нужный нам элемент массива:

$regionname = iconv("CP1251", "UTF-8", $region["region_name"]);

В зависимости от региона записываем в Placeholder regiongeo значение:

switch ($regionname) {
case 'Кировская область':$output = "1"; break;
default:
    $output = "0";
};
$modx->setPlaceholder('regiongeo',$output);

Далее остается вызвать сниппет в шаблоне [[snippetName]], а так же в нужном месте использовать плэйсхолдер [+regiongeo+] и в зависимости от региона менять отображение контента.

comments powered by HyperComments
Вася
2016-01-29 14:16:58
Для какой ветки modx этот сниппет и непонятно как менять содержимое в зависимости от региона?
При копировании материалов обратная ссылка на play-stop.ru желательна обязательна!