Пишите письма → alex@covax.me

Вывод контента в зависимости от города [Drupal 7]

На одном сайте возникла необходимость определять город пользователя по ip и в зависимости от него выводить тот или иной контент. В русскоязычном интернете об этом как-то скудновато мануалов, а с привязкой к друпалу так еще меньше. Проблему в итоге решил, вот делюсь. Есть такие варианты:

Использовать Smart IP + Webform + modalform, как предлагает некий Никита Петров: Блок выбора города на drupal-сайте (+ автоматически по ip)

или

Использовать модуль Geo Block, который дает практически все тоже самое (и плюс еще кое-что), но в три раза быстрее и проще в установке и настройке.
Скачать модуль https://www.drupal.org/project/geo_block
Посмотреть историю создания https://www.drupal.org/project/geo_block

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

UPD Оказалось, что Geo Block глючный, не сохраняет настройки и вообще плохо себя ведет. Поэтому пришлось еще порыться, вот вам два новых варианта:

geoPlugin — определяет страну и город по ip, но использует какие-то странные базы, благодаря чему сильно промахивается по городам. Если вы делаете сайт для России и СНГ, то он вряд ли подойдет, ибо точность никудашная. Плюс, чтобы вытаскивать из него данные и спокойно работать через php, надо патчить модуль с помощью вот этого https://www.drupal.org/node/2452375

и наконец, то, чем я в итоге победил свою проблему:

IP Geo Установил, пользуюсь вот так, например:

if (module_exists('ipgeo')) {
$region = ipgeo_get_region();
if (isset($region ) && $region ->city != '') {
echo $region ->city;
}
}

Удобная штука, еще бы запилили туда дефолтный тулбар для выбора города, вообще красота бы была.

Без инсайтов, пожалуйста

Канал в Телеге. Короткие заметки, текущие мысли, полезные ссылки.