Задача определить регион пользователя и при необходимости модифицировать отображаемый контент страницы с учетом этих данных встречается довольно часто, об одном абсолютно бесплатном продукте и его интеграции в 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