Geo Block - вывод данных в зависимости от города пользователя

Аватар пользователя Niklan

Доброго всем вечера.

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

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

На данный момент реализовано:

  • создание 1 и более блоков;
  • создание неограниченное количество городов для блоков;
  • добавление значения по умолчанию (если для ни одного из городов данного бока нет информации);
  • для каждого города также можно устанавливать свой заголовок блока.
  • Возможность поменять город (1 стиль)

Добавлена возможность пользователю выбирать город из списка. Проблема в том, что 3G модемов и прочих «плавающих сетей», города определяются зачастую неточно, и соответственно, если город определится некорректно, то пользователь руками сможет выбирать свой город.

Это мой второй модуль для Drupal и первый который я залил на Drupal.org. Так что хотелось бы услышать замечания, по коду, работе и т.д.

Загрузка

Drupal.org

На Drupal.org
git clone http://git.drupal.org/sandbox/Niklan/1785956.git geo_block

GitHub

GitHub
.zip | .tar.gz
git://github.com/Niklan/Geo-Block.git

Обновления

Декабрь 10, 2012 13:19
- Настройки для выбора города
- Добавлены настройки для первого стиля

Декабрь 9, 2012 19:57
- Исправлены проблемы с UTF-8 и Кириллицой
- Добавлена возможность смены города

Декабрь 9, 2012 16:05
- Исправлены ошибки с куки
- Установлен ip для тех случаев, если ip = 127.0.0.1
- Добавлена функция генерации списка городов для JS файла, оснонвываяс на добавленных блоках и их городах
- Добавлен JS файл, который добавляет на страницу окно с указанием текущего города и возможностью выбора другого

Тип материала:
Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя Ch
Ch 6 лет назад
Niklan написал:
Но как их подключить при выводе?

check_markup

Аватар пользователя Ch
Ch 6 лет назад

Данные об IP адресе у вас никак не кэшируются. На каждой странице делается внешний запрос на ipgeobase.ru
http://www.drupal.ru/node/80960 тут я делал тоже самое с возможностью получать данные из локальной базы.

И кстати, зачем создавать свои собственные блоки? Можно просто добавить дополнительную опцию видимости к существующим блокам.

Аватар пользователя Niklan
Niklan 6 лет назад
Ch написал:
check_markup

Благодарю. Сработало.

Ch написал:
Данные об IP адресе у вас никак не кэшируются.

Да, это в планах, куки пользователю выдавать.

Ch написал:
ут я делал тоже самое с возможностью получать данные из локальной базы.

Может в дальнейшем реализую локально. Просто на данном этапе модуль никак базу не трогает, разве что стандартными функциями variable_get\set.
Возможно это и выйгрышь, но базы регулярно меняются, обновляются. Соответственно надо регулярно обновлять базу. Недавно у нас в городе ввели несколько новых диапазонов. Ни один сервис, кроме ipgeobase не распознавал. Потихоньку сейчас стабилизуется, но все равно не все. Надо за этим следить, а кому это надо? Например если модуль ставить заказчику. Он явно базу не будет обновлять.

Ch написал:
И кстати, зачем создавать свои собственные блоки? Можно просто добавить дополнительную опцию видимости к существующим блокам.

Честно. Думал так, но не врубился как. (Если подскажите направление, буду признателен.) А потом начал рассуждать и взвешивать плюсы и минусы текущего подхода, и добавления фильтра к блокам.

Проблема в Вашем методе такая. Например делаем блок контактов для сайта компании. Компания работает в 10 городах. Зачем делать 10 блоков и указывать каждому ограничение по городу. А если таких блоков необходимо много? Список блоков превратится в помойку. А тут конкретно создаем блок для контактов. И в нем указываем какие данные для какого города выводим.

Аватар пользователя Niklan
Niklan 5 лет назад

UP. Очень много исправил, добавил, изменил.

Кто хорошо дружит с английским, прошу помочь с коррекцией описаний, названий и т.д.

Аватар пользователя duffnis
duffnis 5 лет назад

Добрый день!
Установил, создал текст для одного города - всё ок, но потом зашёл, чтобы отредакировать а там пусто.
Чтобы изменить пришлось удалить модуль и теперь снова установил и ничего не работает, не подскажите почему?
А так модуль, очень нужен)

Аватар пользователя vitaboss
vitaboss 5 лет назад

GEOBLOCK
column delta - difference on: length
declared: array('description' => 'TODO: пожалуйста, опишите это поле!', 'type' => 'int', 'length' => 11, 'not null' => TRUE)
actual: array('description' => 'Key: Unique block ID (delta) from block table.', 'type' => 'int', 'not null' => TRUE)

Аватар пользователя duffnis
duffnis 5 лет назад

vitaboss, это что, зачем и куда?

Аватар пользователя vitaboss
vitaboss 5 лет назад
duffnis написал:
vitaboss, это что, зачем и куда?

Это ни куда, это модуль schema ругается на этот модуль.
Если никого не парит это, пользуйтесь модулем дальше.

Аватар пользователя drupby
drupby 5 лет назад
vitaboss написал:
GEOBLOCK
column delta - difference on: length
declared: array('description' => 'TODO: пожалуйста, опишите это поле!', 'type' => 'int', 'length' => 11, 'not null' => TRUE)
actual: array('description' => 'Key: Unique block ID (delta) from block table.', 'type' => 'int', 'not null' => TRUE)

https://drupal.org/node/add/project-issue/geo_block

Аватар пользователя АлександрБолт
АлександрБолт 4 года назад

Добавляю новый блок, ввожу в него НАСТРОЙКИ ГОРОДА несколько заполняю
сохраняю...все работает, все хорошо

но если открываю на редактирование снова то НАСТРОЙКИ ГОРОДА ПУСТЫЕ!! и по новой приходиться заполнять((((

Аватар пользователя guitmann
guitmann 2 года назад

Почему то не отображается блок если ставить код gb:city-change (!DOCTYPE html стоит), если div id="gb_placeholder - то работает.
Почему то если на странице происходит какой то JavaScript, то строка с названием актуального города клонируется (создается еще 3 одинаковых)

Аватар пользователя Айдар
Айдар 1 год назад

А где база городов? Как прописывать город в поле City?