На многих корпоративных сайтах вверху есть блок выбора своего города, и при его изменении на сайте уже отображаются статьи или какой-то материал, специфичный именно для этого места.
Примеры таких блоков: на сайте Альфа-банка или Эльдорадо, даже Сбербанк не отстаёт и перенаправляет пользователя сразу на нужный раздел сайта.
Итак, чтобы сделать такое на Друпале, нам понадобится:
Мой модуль интеграции русской базы ip-адресов с модулем Smart IP: (тут будет ссылка на скачивание)
Дальше есть выбор - делать всплывающую форму вручную или воспольноваться кучкой соответствующих модулей. Писать свой код всё равно придется, так что выбор не так очевиден, как кажется на первый взгляд.
Я пошел по пути использования модулей, поэтому здесь описан только этот вариант.
Устанавливаем всю эту радость, в настройках /admin/config/people/smart_ip выставляем использовать нашу локальную базу (в самом конце), импортируем свежие данные о диапазонах ip-адресов с сайта ipgeobase.ru,
создаем блок в шапку, куда пишем примерно такой код: <?phpprint'Ваш город: '.'<a href="'. base_path().'modal_forms/nojs/webform/572" class="ctools-use-modal ctools-modal-modal-popup-small choose_city" >'.$_SESSION['smart_ip']['location']['city'].'</a>';?>
Вместо 572 надо будет потом подставить ид своей вебформы, когда мы её создадим.
Выводим его в шапку. Если всё настроено правильно, у нас сразу определится наш город по нашему же ip-адресу (если только это не локальная машина)
Дальше делаем всплывающую форму для выбора и изменения города.
Создаем вебформу, в неё ставим всего один параметр "Город", "Выпадающий список", далее, там выбираем "подставить предопределенные значения", выбираем словарь таксономии, в котором у нас хранятся все города. В поле "Сообщение о подтверждении" (в самом верху) пишем следующее:
Собственно, всё. Сохраняем, изменяем в коде блока ид на текущий ид вебформы, кликаем на город, должна всплыть форма выбора города.
Еще нужно сделать кастомный модуль и туда засунуть примерно такой код:
function вашмодуль_form_alter(&$form,$form_state,$form_id){if($form_id=='webform_client_form_572'){if($_SESSION['smart_ip']['location']){$form['submitted']['gorod']['#default_value']='tid_'.$_SESSION['smart_ip']['location']['zip'];$form['#submit'][]='_webform_city_submit';}}}function _webform_city_submit($form,$form_state){//тут сохраняем в сессию$tid=substr($form_state['values']['submitted_tree']['gorod'],4);//because 'tid_X';if($_SESSION['smart_ip']['zip']!=$tid){//тут перезаписываем$_SESSION['smart_ip']['zip']=$tid;$_SESSION['smart_ip']['city']= db_select('taxonomy_term_data','terms')->fields('terms',array('name'))->condition('tid',$tid,'=')->execute()->fetchField();global$user;$location=$_SESSION['smart_ip'];
smart_ip_set_location_data($user,$location);}}
Готово. Теперь при изменении города в вебформе и сохранении, город так же будет изменяться и в сессии пользователя.
Осталось только настроить фильтрацию контента в зависимости от выбранного города.
Для этого заходим в любую вьюху, которую надо фильтровать в зависимости от города, там создаем контекстный фильтр по полю "Город", там ставим "если значения фильтра нет в url", выполнить php-код,
сохраняем. Вот и всё, теперь вьюха фильтруется в зависимости от города, который определяется автоматически по ip пользователя.
В дальнейшнейшем при желании можно настроить работу модуля Context в зависимости от выбранного города (показывать определенные блоки только определенным городам).
Удачи!
Утащила отсюда, так как планирую реализовывать. Возможно, будут комменты и дополнения.
Рекомендовать в Социальных сетях:
Комментариев 8 на “Блок выбора города на drupal-сайте (+ автоматически по ip)”
ни чего не получается для Drupal 7, если вы такие крутые то покажите на скриншонах как это у вас вышло…
Устанавливаем всю эту радость, в настройках /admin/config/people/smart_ip выставляем использовать нашу локальную базу (в самом конце), импортируем свежие данные о диапазонах ip-адресов с сайта ipgeobase.ru,
ни чего не получается для Drupal 7, если вы такие крутые то покажите на скриншонах как это у вас вышло…
Это копипаст с другого блога, даже есть ссылка. Я решила несколько иначе, но до статьи пока руки не дошли
ни чего не получается джля drupal 7, если есть возможность но сделайте скриншоны,
для drupal 7 не получается
решила несколько иначе
Подскажите как?
Буду очень благодарен!
gs.irk @mail.ru
Надо поглядеть вспомнить, давно уж. Действительно надо?
Здравствуйте!
А Вы можете по подробней описать.
Устанавливаем всю эту радость, в настройках /admin/config/people/smart_ip выставляем использовать нашу локальную базу (в самом конце), импортируем свежие данные о диапазонах ip-адресов с сайта ipgeobase.ru,